SQL Server与其他服务器不同,通常保存着运营、开发、市场等重要数据,其中大量数据还涉及机密。因此掌握SQL Server的权限设置是DBA必备的关键技能。
SQL Server的安全性是建立在认证和访问许可两种安全机制之上的。其中,认证是用来确定登录SQL Server的用户的登录账号和密码是否正确,以此来验证其是否具有连接SQL Server的权限;
访问许可用来授予用户或组能够在数据库中执行哪些操作,如创建表、查询数据等。
SQL Server的安全机制主要包括以下四个方面:
客户机的安全机制;
服务器的安全机制;
数据库的安全机制;
- 数据对象的安全机制;
用户必须能够登录客户机,然后才能使用SQL Server应用程序或管理工具来访问数据库。对于使用Windows系统的客户来说,它主要涉及到操作系统的安全。主要是Windows账号的安全。
用户登录服务器时,必须使用一个账号(也称为登录账号)和密码,服务器会按照不同的身份验证方式来判断这个账号和密码的正确性。
任何能够登录服务器的账号和密码都对应着一个默认的数据库。SQL Server对数据库的权限管理采用的”数据库用户”的概念。
SQL Server有以下两种身份验证模式:
Windows身份验证模式;
SQL Server和Windows身份验证模式(混合验证模式);
当使用Windows身份验证时,SQL Server会使用操作系统中的Windows用户密码。也就是说,用户身份由Windows进行确认。SQL Server不再提供密码,也不执行身份验证。Windows身份验证使用Kerberos安全协议。比SQL Server身份验证更为安全协议,比SQL Server身份验证更为安全,可以保护SQL Server免受大部分来自网络的非法操作。
Windows身份验证模式适用于局域网内部,访问数据库的情况。
SQL Server和Windows 身份验证模式也称为混合验证模式。允许用户使用Windows身份验证或者使用SQL Server身份验证进行连接。该模式通常用于运行非Windows系统环境的用户、Internet用户或混杂的工作组用户访问SQL Server时。例如,外界用户访问数据库或不能登录Windows域时。
当使用SQL Server身份验证时,在SQL Server中创建的登录名并不是基于Windows用户账号的。用户名和密码通过使用SQL Server创建并存储在SQL Server中。如果必须使用SQL Server身份验证,必须为所有SQL Server账号启用密码策略,如强制密码过期、密码复杂度等。
在SSMS中设置服务器身份验证模式,方法如下:
打开SSMS,右击SSMS实例,在弹出的快捷菜单中选择“属性”命令
在打开的“服务器属性”窗口中选中“安全性”选项,可以设置身份验证模式
通过使用SSMS可以创建和管理登录账户。在默认情况下,SQL Server使用Windows身份验证模式,SQL Server的登录账户无法登录。如果需要利用创建的SQL Server账户登录,需要将身份验证模式改为SQL Server和Windows身份验证模式
在SQL Server中,对SQL Server登录账户提供了以下安全策略:
强制实施密码策略;
强制密码过期;
- 用户在下次登录时必须更改密码;
当新建SQL Server登录账号时,为了提高其安全性,建议选中“强制密码策略”复选框。
sa是SQL Server的默认管理员账号,由于该账号广为人知,容易成为恶意用户的非法操作目标,因此除非某些程序要求必须使用sa账号,否则建议禁用此账号。绝对不能将sa账号设置为空密码或弱密码,建议创建一个拥有与sa账户权限相同的超级用户来管理数据库。但是不能让拥有管理员权限的账号泛滥。
SQL Server中的访问许可可以分别从服务器、数据库及对象三个级别进行设置。
在SQL Server中内置了一组服务器角色(也称为固定服务器角色),这些角色用来执行服务器级别的管理,如创建数据库、管理和审核登录账户、中止SQL Server实例中长时间运行的进程等。他们作用域整台服务器,而非单独某个数据库。SQL Server2016中的“角色”类似于Windows中的“组”。通过将不同的角色赋予不同的用户,用户可以具有不同的操作权限。
一个用户可以拥有多个固定服务器角色权限,但是固定服务器角色不能被修改、添加和删除。具体服务器角色及其能够执行的操作如下:
SQL Server中还有一个特殊的服务器角色public,所有登录名都属于该角色。该角色只拥有查看数据库的权限。
建立了SQL Server登录账户后,需要赋予用户权限,用户才能够对数据库进行查询与更新等操作。登录账户用户访问SQL Server实例,数据库用户则用于访问数据库。如果需要访问某个数据库,则需要在数据库中建立相应的数据库用户。
实际上,数据库用户是映射到登录账户上的。建立过程如下:
创建的任何一个数据库中默认包含两个特殊用户dbo和guest,且不能被修改和删除,如图:
dbo是数据库的所有者,对数据库具有所有权限。默认情况下,创建数据库的登录账号自动对应于数据库的dbo用户,dbo用户又属于db_owner数据库角色的成员,而db_owner数据库角色具有对数据库的全部权限。因此,可以说那个登录账户创建了数据库,这个登录账户就具备了该数据库的所有管理权限。此外,登录账户sa对应所有系统数据库的dbo用户。
- guest是来宾用户,同样不可删除。guest用户不映射任何登录账户。所有没映射的登录账户都将以guest用户身份访问数据库。guest用户默认没有任何权限,且处于禁用状态,因此启用并授予权限时一定要慎重。
服务器角色主要控制服务器登录名在服务器范围内的访问,但是在设置具体数据库的管理和操作权限方面就显得权限太大了,因此需要依靠数据库角色对数据库级别的对象进行更加细化的权限划分。SQL Server默认提供了一组固定数据库角色,用来赋予用户操作数据库的权限,如查询数据表、备份和还原数据库等。固定数据库角色及其权限如下图:
固定数据库还包含有一个名为public的角色,该角色用来捕捉数据库用户的所有默认权限,所有用户都属于public角色,该角色同样不可以被删除;
- 数据控制语言包括GRANT和REVOKE;
为用户设置数据库级别权限的具体步骤如下:
根据自己需求自行配置选项即可
一个数据库中通常包含多个数据表、视图、存储过程等对象,如果赋予了某个用户对数据库的读取权限,用户就可以读取该数据库下的所有表或视图等。
SQL Server还提供了一些更细化的权限,如查询、插入或更新数据的权限等,这些权限可以作用于单个表上。常用的权限及其说明如下图:
在单个表上授予用户权限的具体步骤如下:
如果同时赋予了“授予”和“拒绝”权限,则“拒绝”权限的优先级高于“授予”权限。
数据库本身也是对象,为数据库授权是,可以为其授予在数据库中创建其他各种对象的权限,如更改用户、创建表、查询数据等。
在单个数据库上授权用户权限的具体操作步骤如下:
数据库管理员最担心的情况就是数据库瘫痪,造成数据丢失。而备份作为数据的副本,可以有效的保护和恢复数据。
对于生产数据来讲,数据的安全性是至关重要的,任何数据的丢失都可能产生严重的后果。通常,造成数据丢失的原因主要包括以下几类:
在SQL Server中提供了三种常用的备份类型,分别是完整备份、差异备份和事务日志备份。
完整备份包括对整个数据库、部分事务日志、数据库结构和文件结构的备份。完成备份代表的是备份完成时刻的数据库。
完整备份是备份的基础,提供了任何其他备份的基准。其他备份(如差异备份)只有在执行完成备份之后才能被执行。
差异备份是指对上一次完整备份之后所有更改的数据做备份,备份过程能够识别出数据库哪一部分被修改了,并只对这一部分做备份。
差异备份的优势是速度快、备份数据库所需要的时间很少,但差异备份要求事先执行一次完成备份。
事务日志备份记录了数据库的所有改变。在备份事务日志时需要考虑以下因素:
在执行了至少一次完成备份后,才能备份事务日志;
在简单恢复模式下不能备份事务日志;
- 如果没有与其一致的数据库备份,则不能恢复事务日志;
在执行数据库事务日志备份期间,SQL Server将做以下工作:
备份事务日志:从上一次成功的事务日志备份到当前事务日志的尾部;
- 截断事务日志:到事务日志活动部分的开始,丢弃不活动的部分;
此外,事务日志备份主要是SQL语句,而不是整个数据库结构、文件结构或数据。
不管是备份还是还原,都是在一定的恢复模式中进行的。恢复模式是数据库的一种特性、控制这数据库备份和还原的基本行为。书籍库管理员应根据企业系统实际运作的需求及对数据可用性和恢复的需求来选择合适的恢复模式。
SQL Server提供了三种恢复模式:简单模式、完整恢复模式和大容量恢复模式。
在简单恢复下,,不活动的日志将被删除,所以不支持事务日志备份,如下图所示,图中进行了一些数据库备份。在最近的备份t5之后的一段时间,此数据库中出现了数据丢失。数据库管理员将使用t5备份来讲数据库还原到备份完成的时间点,之后对数据库进行更改将丢失。
由于不支持事务日志备份、数据库只能恢复到备份的时间点,而无法将数据库还原到故障点或特定的时间点。因此,简单恢复模式主要用于小型数据库和不经常更改的数据库。
对于十分重要的生产数据库,在发生故障时可能要求恢复到历史上某个时刻。一旦发生故障时,必须保证数据不丢失,一旦发生故障时,必须保证数据不丢失,保证数据能够恢复到发生故障时的状态。这样,就必须采用完整恢复模式。
完整恢复模式可在最大范围内防止出现故障时丢失数据,它包括数据库备份和事务日志备份,并提供全面保护,使数据库免受媒体故障的影响。这个模式使用数据库和所有日志的备份区恢复数据库如果日志没有损坏,SQL Server可以恢复所有数据,除了在失败那一刻的事务。
由于支持事务日志备份,因此完整恢复模式可以将数据库恢复到任意一个指定的时间点。如图:
图中,能将数据库恢复到故障点,从而恢复所有数据,恢复操作可以还原所有已提交的事务,正在进行的事务将回滚。
DBA在某些场合需要对数据库执行一些大批量的数据插入、更新或删除操作,如一次需要导入上百万条数据。如果在完整恢复模式下,那么这些操作将产生大量的日志记录,导致数据库性能很低。在这种环境下,可以采用大容量日志恢复模式来提高性能。
虽然大容量日志恢复模式会完整地记录其他事务,但它只对大容量操作进行最小记录。大容量日志恢复模式是对完整恢复模式的补充,提供了良好的性能,且占用较小的日志空间d.anshi,大容量日志恢复模式增加了这些大容量复制操作丢失数据的风险,因为最小日志记录大容量操作不会逐个记录书屋。
只要日志备份包含大容量操作,数据库就只能恢复到日志备份的结尾,而不能恢复懂啊某个时间点,或日志备份中某个标记的事务。
在进行备份的时候,首先需要建立一个文件来存储备份的数据,这个备份文件就叫备份设备。
SQL Server使用物理备份设备和逻辑备份设备标识备份设备。
物理备份设备是操作系统用来表示备份设备的名称;比如:C:\Backups\Accounting\Full.bak。
逻辑备份设备是用户定义的别名,用来标识物理备份设备;逻辑备份设备永久地存储在SQL Server内的系统表中,使用逻辑备份设备的优点是引用它比引用物理设备名称简单。
———————— 本文至此结束,感谢阅读 ————————
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。