SQL的数据访问控制
一、SQL SEVER的安全体系结构
1、客户机操作系统的安全性:在使用客户计算机通过网络实现对SQL SEVER服务器的访问时,用户首先要获得客户计算机操作系统的使用权。
操作系统安全性是操作系统管理员或网络管理员的任务。
2、SQL SEVER的登录安全性:SQL SEVER服务器的安全,建立在控制服务器登录帐号和密码的基础上。两种登录方式,无论是使用哪种登录方式,通过登录时提供的密码和账号,决定了用户能否获得SQLSEVER访问权,并确定获得访问权限后,用户使用SQL SEVER进程时就可以拥有的权利。
管理和设计合理的登录是数据库管理员(DBA)的重要任务。
3、数据库的使用安全性:设置访问数据库用户
4、数据库对象的使用安全性:设置对数据库对象操作权限
二、SQL SERVER的安全控制
1.SQL SERVER的认证模式及认证模式配置
SQLSERVER的认证模式有两种:“Windows only认证”模式和“混合模式”。“Windows only认证”模式只允许使用“Windows”认证机制。这时,用户不能指定SQLServer的登录账户。混合认证模式既允许使用“Windows only认证”机制,也允许使用SQLServer认证机制。当使用该种认证模式时,对于可信连接用户的连接请求,系统将采用WindowsNT/2000认证模式,而对于非可信连接则采用SQL Server认证模式,采用SQLServer认证模式时,系统检查是否已经建立了该用户的登录标识以及口令,通过验证后,才可以连接到SQLServer服务器上。
2.服务器登录管理
(1) SQL Server服务器登录管理
SQL Server有2个默认的用户登录帐号:即sa和administrators\builtin。登录账户的信息存储在系统表master_syslogins中。sa是系统管理员的简称,是一个特殊的登录账户,拥有SQL Server系统和全部数据库中的权限。不管SQL Server实际的数据库所有权如何,sa账户被默认为是任何用户数据库的主人。所以,sa拥有作高最高的管理权限,可以执行服务器范围内的所有操作。
Windows NT Server/2000还有一个默认的超级管理员账户BUILTIN\administrators,BUILTIN\administrators账户在SQL Server系统上和全部数据库也有全部的权限。
(2) 服务器帐号的添加
Windows NT/2000帐户由Windows域用户管理创建/修改和删除。当使用SQLServer的混合验证时,只能使用SQL Server登录标识来管理用户连接。
使用菜单建立用户帐号的步骤如下:
①企业管理器中单击登录的服务器中的“安全性”文件夹。
②用右键单击“登录”,选择新建登录,出现新建登录对话框。
③在“常规”页框界面下,用于指定登录帐户的名称、身份验证的方式和默认访问的数据库。
④在服务器角色页框界面下,用于对登录授予服务器范围内的安全特权。在服务器角色列表框中,列出了系统的固定服务器角色。
⑤选择数据库访问页框,用于确定该帐户在SQL中对哪个数据库拥有什么样的权限。上、下两个列表框分别列出了该帐号可以访问的数据库和数据库角色。,
⑥设置完成后,单击“确定”按钮即可完成登录帐号的创建。
注意:在SQL 中增加了登录账户之后,就可以把它们映射成它们需要访问的数据库中的用户或者角色,每一个数据库中,系统表sysusers的每一行都表示是一个Windows NT用户、Windows组、SQL Server用户或者SQL Server角色。
(3)用户帐号的修改
使用系统存储过程sp_defaultdb、sp_defaultlanguage修改登录帐户的默认数据库和默认语言;使用系统存储过程sp_password来修改用户的密码。
sp_defaultdb的调用格式为:exec sp_defaultdb 帐户名,新默认数据库名称。
如:exec sp_defaultdb 'a1','pubs' ,a1帐户默认数据库为pubs数据库。
sp_password的调用格式为:exec sp_password 旧密码,新密码,帐户名
如:exec sp_password 'a1','a2','a1',将帐户名为a1的旧密码a1改为a2。
(3)用户帐号删除
用户帐号删除可以使用鼠标操作,也可以使用系统存储过程。系统存储过程的调用格式为:execsp_droplogin 用户帐号。
如删除存储帐号a1,命令格式为:exec sp_droplogin 'a1'
注意:在SQL Server中删除账户信息有许多限制的,例如,已经映射到数据库用户上的不允许被删除;系统账户sa不能被删除;正在使用的账户不能被删除;拥有数据库的账不能被删除等。
3.服务器角色管理
服务器角色是指根据SQL Server的管理任务,以及这些任务相对的重要性等级来把具有SQLServer管理职能的用户划分为不同的用户组,每一组所具有的管理权限都是SQLServer内置的,即不能对其进行添加、修改和删除,只能向其中加入用户或者其他角色。七种常用的固定服务器角色:
系统管理员(System Administrators):拥有SQLServer所有的权限许可。
服务器管理员(Sever Administrators):管理SQL Server服务器端的设置。
磁盘管理员(Disk Administrators):管理磁盘文件。
进程管理员(Process Administrators):管理SQL Server系统进程。
安全管理员(Security Administrators):管理和审核SQL Server系统登录。
安装管理员(Setup Administrators):增加、删除连接服务器,建立数据库复制以及管理扩展存储过程。
数据库创建者(Database Creators):创建数据库,并对数据库进行修改。
注意:管理员或数据库所有者在设置访问权限时,应首先建立角色,并将访问权限集中授予角色,之后将需要拥有这一权限的用户增加到角色中,这些用户即继承角色的访问权限。
4.数据库用户管理
用户是基于数据库使用的名称,是与登录帐户相对应的。有两个默认的数据库用户帐户:dbo和guest,可对数据库添加新用户。
与服务器帐户的关系:登录帐户为了访问数据库,必须成为数据库用户帐户或者一个默认的用户帐户,数据库的访问权是通过影射数据库的对象与登录帐户之间的关系来实现的。
(1) 用户帐号添加
步骤如下:
①右键单击某数据库下“用户”,选择“新建数据库用户”,出现新建登录对话框。
②在对话框中选择访问该数据库的帐户,指定该帐户在该数据库中的用户名称和该用户的角色等信息。(注意:只有在数据库中没有用户名称的帐户才可以选择)。
另外,还可以使用系统存储过程添加数据库用户,格式为:
execsp_grantdbaccess 用户帐户名
(2) 用户帐号删除
使用系统存储过程:sp_revokedbaccess用户帐户名
注意:dbo是数据库的拥有者,在安装SQL Server的同时,就被设置到Model数据库中,而且不能被删除,所以dbo在每个数据库中都存在。dbo是数据库的最高权力拥有者,可以在数据库范围内执行一切操作。dbo永远无法从数据库中删除。dbo用户对应于创建该数据库的登录账户,所以所有系统数据库的dbo都对应于sa账户。
guest用户可以是任何已经登录到SQL Server服务器的用户。所有的系统数据库除了Model数据库以外都有guest用户,而所有新建的数据库都没有这个用户,可以使用execsp_grantdbaccess ‘guest’,为当前数据库添加guest用户。Guest用户的存在意味着所有登录到SQLServer 服务器的用户都可以访问该数据库,即使他没有成为数据库的用户。
5.数据库角色管理
数据库角色是为某一用户或某一组用户授予不同级别的管理或访问数据库以及数据库对象的权限,这些权限是数据库专有的,并且还可以使一个用户具有属于同一数据库的多个角色。SQLServer提供了两种类型的数据库角色:即固定的数据库角色和用户自定义的数据库角色。
10个固定的数据库角色(也称为标准角色):
public:每个数据库最基本的数据库角色,每建立新数据库帐户,系统自动会为其加入public角色。
db_owner:数据库的所有者,可以对所拥有的数据库执行任何操作。
db_accessadmin:可以增加或者删除数据库用户、工作组和角色。
db_addladmin:可以增加、删除和修改数据库中的任何对象。
db_securityadmin:执行语句许可和对象许可。
db_backupoperator:可以备份和恢复数据库。
6.许可(权限)管理
SQL Server数据库对象包括表、索引、视图、触发器、存储过程等,数据库对象的创建者即成为数据库对象的所有者。数据库对象创建完后,只有拥有者可以访问该数据库对象。任何其他用户想访问对象必须获得拥有者的许可。拥有者可以授予许可给指定的数据库用户,这种许可被称作对象许可。
对表和视图,拥有者可授予INSERT、UPDATE、DELETE、SELECT和REFERENCS 许可,或者用“ALL permissions”代替前面5种许可。
数据库拥有者还可授予执行某些Transact-SQL命令的许可。这种许可在SQL Server 称作命令许可。例如“CREATETALBE”或“CREATEVIES”等。这些命令本来只有特定用户如dbo可以使用。
(1)授权许可
授权许可的命令用Grant,具体格式参考“SQL 的联机帮助”。
如:授权a1对数据表p有插入、删除和更新操作权限。
grant insert,update,delete on p to a1
如:授权a1有创建视图,数据表的权限。
grant create view ,create table to a1
(2)撤消许可
撤消许可的命令用Grant,具体格式参考“SQL 的联机帮助”
revoke insert,update,delete onp to a1, 撤消a1对数据表p有插入、删除和更新操作权限
如:授权a1有创建视图,数据表的权限。
(3)拒绝许可
在不撤消授权许可的前提下,数据库管理员可以根据实际情况,拒绝用户对数据库的访问,命令用Deny,具体格式参考“SQL 的联机帮助”
Deny insert,update,delete on pto a1