SQL安全性管理.docx
《SQL安全性管理.docx》由会员分享,可在线阅读,更多相关《SQL安全性管理.docx(13页珍藏版)》请在冰豆网上搜索。
SQL安全性管理
服务器认证
服务器认证是指每个用户在通过网络访问SQLServer2000数据库之前,操作系统或数据库服务器会对用户进行身份验证,以此来决定该用户是否可以连接到服务器以及该用户可以访问哪些数据。
没有通过检查的用户,服务器将拒绝其对数据库的连接请求。
在服务器认证阶段,SQLServer提供了3种认证模式:
第一种是Windows认证模式;第二种是SQLServer认证模式;第三种是两种认证模式的有机结合,即混合认证模式,它既支持Windows认证,又支持SQLServer认证。
下面详细介绍这3种认证模式。
(1)Windows认证模式
用户在与SQLServer进行连接时不需要提供SQLServer登录账号就可以直接与SQLServer相连接,这种认证模式就是Windows认证模式。
使用Windows认证模式时,只要来访用户通过“服务器平台”用户的检验,SQLServer就不再对该用户进行安全性检验工作了,此用户就可以成功地连接到SQLServer数据库服务器。
Windows认证模式的优点主要体现在以下几点:
● WindowsNT/2000有着更强的用户账户管理工具。
可以设置账户锁定、密码期限等,数据库管理员可以把用户账户交给WindowsNT/2000去管理,而把自己的工作主要集中在数据库管理方面。
● WindowsNT/2000的组策略支持多个用户同时被授权访问SQLServer。
● 用户只需使用一个用户名和口令,就可以同时访问Windows和SQLServer。
如果在客户和服务器间建立连接,使用该验证模式时,必须满足的一个条件就是客户端的用户必须在服务器上有合法的WindowsNT/2000账户,服务器能够在自己的域中验证该用户。
注意:
如果服务器启动了Guest账户,也可以使用该验证模式,但这种方法常常会带来安全上的隐患。
(2)SQLServer认证模式
当用户与SQLServer连接时,必须提供由SQLServer管理员为其设定的登录账号和口令,并指定SQLServer工作在SQLServer认证模式下。
经过SQLServer安全系统对用户的身份进行验证合法后才能连接上数据库服务。
SQLServer认证模式的优点主要体现在以下几点。
● 创建了WindowsNT/2000之上的另外一个安全层次。
● 支持更大范围的用户,如非WindowsNT客户、Novell网用户等。
● 一个应用程序可以使用单个的SQLServer登录账号和口令。
(3)混合认证模式
混合认证模式是前两种认证模式的有机结合。
用户既能使用Windows认证模式又能使用SQLServer认证模式连接到SQLServer服务器。
数据库认证
用户必须使用特定的登录账户经过验证才能登录到SQLServer。
登录以后,用户在访问每个数据库时也必须使用特定的用户账号才能对数据库进行访问,而且只能查看经授权可以查看的表和视图,只能执行经授权可以执行的存储过程和管理功能,这样可以有效地控制用户访问数据库的权限,防止一个用户在连接SQLServer以后,对服务器上的所有数据库进行访问。
用户账户的数据库访问权限决定了用户在数据库中可以进行哪些操作。
注意:
安装系统时,Guest用户自动加入到master、pubs、tempdb和Northwind数据库中,当SQLServer数据库用户没有用户账号时可以使用Guest用户账号登录,以匿名的方式查看数据库中的数据。
管理服务器角色
服务器角色是指根据SQLServer的管理任务以及这些任务相对的重要性等级,把具有SQLServer管理职能的用户划分为不同的角色来管理SQLServer的权限。
服务器角色适用于服务器范围内,其权限不能被修改。
启动企业管理器,展开服务器组及指定的服务器,展开“安全性”节点,单击“服务器角色”选项,右侧列表框内自动显示存在的服务器角色,如图1所示。
图1服务器角色
SQLServer共有8种预定义的服务器角色,各角色的具体含义如表1所示。
表1服务器角色
服务器角色
角色描述
Sysadmin(系统管理员)
可以在SQLServer中做任何事情
Serveradmin(服务器管理员)
设置SQLServer服务器范围内的配置选项,可以关闭服务器
Setupadmin(安装管理员)
可以管理扩展的存储过程
Securityadmin(安全管理员)
管理数据库登录
Processadmin(进程管理员)
管理运行在SQLServer中的进程
Dbcreator(数据库创建者)
可以创建和更改数据库
Diskadmin(磁盘管理员)
管理磁盘文件
Bulkadmin(批量管理员)
可以执行大容量数据插入操作
下面介绍如何使用企业管理器来管理服务器角色。
操作步骤如下:
(1)启动企业管理器,展开服务器组及指定的服务器。
(2) 展开“安全性”节点,单击“服务器角色”选项,右侧列表框内自动显示当前SQLServer服务器的角色,如图2所示。
(3)在企业管理器右边的角色列表框中右键单击要查看信息的服务器角色“processadmin”,在弹出的快捷菜单中选择“属性”命令,弹出“服务器角色属性”对话框,如图3所示。
在这个对话框中,可以看到该角色的成员。
(4)在“服务器角色属性”对话框中单击“添加”按钮,在弹出的“添加成员”对话框中选择登录账号“mrsoft”,即可向该角色中添加成员。
如果想删除用户,只要选中该用户,单击“删除”按钮即可,如图4所示。
图2服务器角色列表
图3服务器角色属性
图4向服务器角色添加用户
(5)最后单击“确定”按钮即可完成添加操作。
管理数据库角色
数据库角色是对数据库对象操作的权限的集合。
在SQLServer中,数据库角色可以新建,也可以使用已存在的数据库角色。
数据库角色能为某一用户或一组用户授予不同级别的管理、访问数据库或数据库对象的权限,这些权限是SQLServer数据库专有的。
启动企业管理器,展开服务器组及指定的服务器。
展开指定的数据库“model”节点,单击“角色”选项,右侧列表框内自动显示存在的数据库角色,如图1所示。
图1数据库角色
数据库角色
角色描述
db_accessadmin
可以增加或删除WindowsNT认证模式下用户或用户组以及SQLServer用户
db_backupoperator
可以备份数据库
db_datareader
能且仅能对数据库中任何表执行select操作,从而读取所有表的信息
db_datawriter
能对数据库中任何表执行insert、delete、update操作,但不能进行select操作
db_ddladmin
可以新建、删除、修改数据库中任何对象
db_denydatareader
不能对数据库中任何表进行select操作
db_denydatawriter
不能对数据库中任何表进行insert、delete、update操作
db_owner
数据库的所有者,可以执行任何数据库管理工作,可以对数据库内的任何对象进行任何操作
db_securityadmin
管理数据库内权限的grant、deny、revoke操作,即对语句、对象、角色权限的管理
public
是一个特殊的角色,它包含所有数据库用户账户和角色所拥有的访问权限,这种权限的继承关系不能改变。
管理员应该特别注意给该角色赋权限
在SQLServer中,数据库角色分为两种类型:
一种是预定义数据库角色,另一种是自定义数据库角色。
(1)预定义数据库角色
预定义数据库角色是在SQLServer中已经定义好的,具有管理、访问数据库权限的角色。
有一点需要注意的是数据库管理员不可以对预定义数据库角色进行任何权限修改,也不可以删除这些角色。
(2)自定义数据库角色
自定义数据库角色可以使用户在数据库中实现某一种特定功能。
其优点主要体现在以下几点:
● SQLServer数据库角色可以包含多个用户。
● 在同一个数据库中用户可以有不同的自定义角色,这种角色的组合是自由的。
● 角色可以进行嵌套,从而在数据库中实现不同级别的安全性。
用户自定义数据库角色还可以分为两种类型:
标准角色和应用角色。
标准角色通过对用户权限等级的认定将用户分为不同的用户组,使用户相对于一个或多个角色,进而实现管理的安全性。
应用角色使用户只能通过特定的应用程序间接地存取数据库中的数据。
二者的区别主要体现在以下几点。
● 应用程序角色不包含成员。
● 默认情况下,应用程序角色是非活动的,需要用密码激活。
● 应用程序角色不使用标准权限。
SQLServer中还有一个特殊的数据库角色public,它存在于每一个数据库中,包括系统数据库,如master、msdb、model和用户数据库,数据库的所有用户都属于public角色,并且不能从public角色中删除。
1.创建数据库角色
下面以在数据库“db-kcgl”中创建数据库角色“kcgl”为例,介绍如何在企业管理器中创建数据库角色。
操作步骤如下:
(1)启动企业管理器,展开服务器组及指定的服务器。
(2)展开“数据库”选项,展开指定的数据库“db-kcgl”节点,右键单击“角色”选项,在弹出的快捷菜单中选择“新建数据库角色”命令,如图2所示。
(3)进入如图3所示的“数据库角色属性”对话框。
在“名称”文本框中输入名称“kcgl”,选择数据库角色类型为“标准角色”,单击“添加”按钮选择要添加的用户。
设置完成后单击“确定”按钮即可创建新的数据库角色“kcgl”。
注意:
列权限、用户权限、角色权限发生冲突时,列权限优先于用户权限,用户权限优先于角色权限。
2.删除数据库角色
下面使用企业管理器删除数据库角色。
操作步骤如下:
图2建立数据库角色
图3数据库角色属性
(1)启动企业管理器,展开服务器组及指定的服务器。
(2)展开指定的数据库“db-kcgl”结点,选中“角色”选项,企业管理器右边的角色列表框中显示相应的角色,鼠标右键单击要删除的角色“kcgl”,在弹出的快捷菜单中选择“删除”命令,SQLServer会出现确认删除的对话框,选择“确定”按钮即可以删除数据库角色,如图4所示。
图4删除数据库角色
注意:
在SQLServer中不能删除预定义的数据库角色。
下面使用T-SQL命令删除数据库角色。
使用sp_droprole命令可以删除数据库角色。
语法:
Sp_sp_droprole[@rolename=]'role'
参数说明:
@rolename:
指自定义的数据库角色。
示例:
本示例使用sp_droprole命令删除数据库“db-kcgl”中的数据库角色“kcgl”。
SQL语句如下:
USEdb-kcgl
GO
EXECsp_droprole'kcgl'
GO
注意:
如果该数据库角色中还有成员或仍拥有数据库对象,则无法删除该角色,必须首先删除其中的成员或数据库对象。
查看登录账号
启动企业管理器,展开服务器组及指定的服务器,展开“安全性”节点,单击“登录”选项,可看到系统创建的默认登录账号及已建立的登录账号,如图1所示。
图1查看服务器登录账号
其中BUILTIN\Administrators和sa是系统默认创建的两个登录账号。
● BUILTIN\Administrators:
凡是WindowsNTServer/2000中的Administrators组的账号都允许作为SQLServer登录账号使用。
● sa:
SQLServer系统管理员登录账号,该账号拥有最高的管理权限,可以执行服务器范围内的所有操作。
通常SQLServer管理员也是WindowsNT或WindowsServer2000的管理员。
特殊数据库用户
SQLServer的数据库级别上也存在着两个特殊的数据库用户:
dbo和guest。
它们具有特殊的权限和作用。
1.dbo
dbo是数据库的最高权利拥有者,可以在数据库范围内执行一切操作。
在安装SQLServer时,被设置到model数据库中,它的用户ID(uid)总是1,并且永远无法从数据库中将其删除。
2.guest
guest是SQLServer数据库中的一个特殊用户,它可以使任何已经登录到SQLServer服务器的用户都可以访问数据库。
在系统数据库中除model以外都有guest用户。
而且master和tempdb系统数据库中的guest用户不能被删除,其他数据库中的guest用户都可以被创建或删除。
但创建时必须使用sp_grantdbaccess命令建立guest用户。
示例:
本示例使用sp_grantdbaccess命令为数据库“db_kcgl”建立guest用户。
SQL语句如下:
USEdb_kcgl
EXECsp_grantdbaccessguest
GO
使用企业管理器管理权限
1.设置数据库访问权限
下面以设置数据库“kfgl”的访问权限为例介绍如何通过企业管理器设置数据库的访问权限。
操作步骤如下:
(1)启动企业管理器,展开服务器组及指定的服务器。
(2)展开“数据库”节点,鼠标右键单击数据库“kfgl”,在弹出的快捷菜单中选择“属性”命令,打开数据库属性对话框,如图1所示。
图1选择“属性”命令
(3)在弹出的数据库属性对话框中单击“权限”选项卡,如图2所示,选择数据库用户“mrsoft”的“创建表”和“创建视图”复选框,即允许创建表及视图。
(4)单击“确定”按钮完成权限的设置。
图2数据库属性
2.设置数据库对象的访问权限
用户在具有了访问数据库的权限之后,就可以授予其访问数据库对象的权限了。
下面设置允许数据库用户“mrsoft”对数据库“kfgl”中的员工信息表“ygxx”中的数据进行查询、插入、修改和删除操作。
操作步骤如下:
(1)启动企业管理器,展开服务器组及指定的服务器。
(2)展开指定的数据库“kfgl”节点,单击“表”选项,在右侧的列表中右键单击表“ygxx”选项,在弹出的快捷菜单中选择“属性”命令,打开“表属性”对话框,如图3所示。
(3)单击“权限”按钮,打开“对象属性”对话框,选择数据库用户“mrsoft”的“SELECT”、“INSERT”、“UPDATE”和“DELETE”复选框,即允许数据库用户“mrsoft”对数据进行查询、插入、修改和删除操作,如图4所示。
图3表属性
图4设置对象的访问权限
注意:
如果选中相应的数据库用户,单击对话框下方的“列”按钮,在弹出的对话框中可以设置个别列的访问权限。
3.设置数据库角色权限
在6.2.2节中新建了一个数据库角色“kcgl”,但没有对其赋予数据库操作权限。
下面我们就对数据库角色“kcgl”设置权限。
操作步骤如下:
(1)启动企业管理器,展开服务器组及指定的服务器。
(2)展开指定的数据库“db-kcgl”,选中“角色”选项,在右侧列表中右键单击已经创建的数据库角色“kcgl”,在弹出的快捷菜单中选择“属性”命令,弹出“数据库角色属性”对话框,如图5和图6所示。
图5右键选择“属性”命令
图6数据库角色属性
(3)在如图6所示的“常规”选项卡中,可以添加或者删除数据库角色中的用户,单击“权限”按钮,在弹出的“权限”选项卡中选择角色的权限,如图7所示。
图7数据库角色的“权限”选项卡
列表中显示当前数据库角色“kcgl”中的数据表和视图等对象,同时列出对象可以执行的数据操作。
单击数据操作所对应的单元格即可设置权限。
“√”号表示用户对该对象执行相应的操作,“×”号表示禁止用户对该对象执行相应的操作。
(4)在图7所示的“权限”选项卡中,选中表“DQ”,单击“列”按钮,在出现的“列权限”的“常规”选项卡中对数据库角色赋予对对象的访问权限,如图8所示。
图8设置列的权限