第十二章 SQL的安全机制
? SQL server 的安全机制
SQL server的安全机制可以划分为 4个等级:
1,客户机操作系统的安全性
2,SQLserver的等安全性
3,数据库的使用安全性
4,数据库对象的使用安全性
每个安全等级就好象一道门, 如果用户拥有开门的钥匙, 则用户可以
通过每一道门达到下一个安全等级, 如果通过了所有的门, 则用户就
可以实现对数据的访问 。
用户 客户机 SQL 服务器 数据库 数据库对象1 2 3 4
第十二章 SQL的安全机制
? SQL server 的安全机制
1,客户机操作系统的安全性
在用户使用客户计算机通过网络实现对 SQL server 服务器的访问时,
用户首先要获得客户计算机操作系统的使用权 。
2,SQLserver的安全性
SQL server的服务器级的安全性建立在控制服务器登陆帐号和密码
的基础上 。 用户在登录时提供的登录帐号和密码, 决定了用户能否获
得 SQL server的访问权, 以及在登录以后, 用户在访问 SQL server进
程是可以拥有的权利 。
3,数据库的安全性
在用户通过 SQL server服务器的安全性检验后, 将直接面对不同的
数据库入口 。
4,数据库对象的安全性
第十二章 SQL的安全机制
? SQL server 的安全机制
为了实现安全性,每个网络用户在访问 SQL Server数据库之前,
都必须经过两个阶段的检验:
身份验证阶段( Authentication):用户在 SQL Server上获得对任
何数据库的访问权限之前,必须登录到 SQL Server上,并且被认为是
合法的,SQL Server或者操作系统对用户进行验证。
权限验证阶段( Permission Validation):用户身份验证通过后,
登录到 SQL Server上,系统检查用户是否具有访问服务器上数据对象
的权限。
用户 客户机 SQL 服务器 数据库 数据库对象1 2 3 4
身份验证 权限验证
第十二章 SQL的安全机制
? SQL server 的安全机制
身份验证阶段( Authentication),Windows验证模式和混合验证模式
1,Windows验证模式
在该验证模式下,SQL Server检测当前使用的 Windows用户帐号,
并在 Syslogins表中查找该帐号,以确定该帐号是否有权登录。在这种
方式下,用户不必提供密码或者登录名让 SQL Server验证。
Windows验证模式下主要有以下优点:
1)数据库管理员的工作可以集中在管理数据库方面,而不是管理用户帐户
。对用户帐户的管理可以交给 Windows NT/2000去完成。
2) WindowNT/2000有着更强的用户帐户管理工具。可以设置帐户锁定、
密码期限等。如果不是通过定制来扩展 SQL Server,SQL Server是不具备这
些功能的。
3) Windows NT/2000的组策略支持多个用户同时被授权访问 SQL Server。
但是,要在客户和服务器间建立连接,必须满足以下两个条件中的一个:
1)客户端的用户必须有合法的服务器上的 Windows NT/2000帐户,服务器
能够在自己的域中或者信任域中验证该用户。
2)服务器启动了 Guest帐户。但该方法会带来安全上的隐患,因而不是一
个好的方法。
第十二章 SQL的安全机制
? SQL server 的安全机制
2、混合验证模式
混合验证模式允许以 SQL Server验证模式或者 Windows验证模式
来进行验证。使用哪种模式取决于在最初通信时使用的网络库。如果
一个用户使用的是 TCP/IP的 Sockets进行登录验证,则将使用 SQL
Server验证模式;如果用户使用命名管道,则登录时将使用 Windows
验证模式。但是对于 Windows 9X系列的操作系统,只能使用 SQL
Server验证模式。
SQL Server验证模式下,处理登录的过程为:用户在输入登录名和密
码后,SQL Server在系统注册表中检测输入的登录名和密码。如果输
入的登录名存在,而且密码也正确,就可以登录到 SQL Server上。
混合验证模式具有以下优点:
1)创建了 Windows NT/2000之上的另外一个安全层次。
2)支持更大范围的用户,如非 Windows NT客户,Novell网用户等。
3)一个应用程序可以使用单个的 SQL Server登录帐号和口令。
第十二章 SQL的安全机制
? SQL server 的安全机制
3、设置验证模式
在第一次安装 SQL Server,或者使用 SQL Server连接其他服务器
的时候,需要指定验证模式。对于已经指定验证模式的 SQL Server服
务器,在 SQL Server中还可以进行修改。操作步骤如下:
1)打开 Enterprise Manager,展开“服务器组”文件夹,在其中的
某个服务器上单击右键,在弹出的快捷菜单上选择“编辑 SQL Server
注册属性”菜单命令,这时,已注册的 SQL Server属性”对话框。
2) 在对话框中设置验证模式后,单击“确定”按钮即可。
注意:修改验证模式后,必须首先停止 SQL Server服务,然后重新启
动 SQL Server,才能使设置生效。
第十二章 SQL的安全机制
? SQL server 的安全机制
权限验证阶段
用户必须使用特定的登录账户才能连接到 SQL Server。建立连接
以后,用户必须使用特定的用户账户才能对数据库进行访问,而且只
能查看经授权可以查看的表和视图,只能执行经授权可以执行的存储
过程和管理功能。
当验证了用户的身份并允许其登录到 SQL Server以后,在用户访
问的每个数据库中都要求设置单独的用户账户。这样做的目的是防止
—个用户在连接到 SQL Server以后,对服务器上的所有数据库进行访
问。
第十二章 SQL的安全机制
? SQL server 的安全机制
权限验证阶段
每个数据库中的用户账号都用于为该数据库的对象设置安全权限;无论是 Windows NT用户帐户、用户所属的 Windows NT组、还是
SQL Server登录账户,都可以在数据库中映射为不同的数据库用户账
户。如果不存在直接映射的账户,就可以允许用户以 Guest账户在数
据库中工作,前提是该账户已经存在。用户账户的数据库访问权限决
定了用户在数据库中可以进行哪些操作。
用户获得对数据库的访问权限以后,SQL Server就可以接受并执
行命令。用户在数据库中所进行的所有活动都是通过 Transact-SQL语
句传到 SQL Server中的。当 SQL Server接收到这些语句时,将确定用
户是否具有在数据库中执行该语句的权限。如果用户没有执行该语句
的权限或者没有访问该语句所使用对象的权限,则 SQL Server向用户
返回一个权限错误。
第十二章 SQL的安全机制
? SQL server 的标准登陆模式
服务器的安全性是通过设置系统登录账户的权限进行管理的。用
户在连接到 SQL Server 2000时与登录账户相关联;在 SQL Server
2000中有两类登录账户:一类是登录服务器的登录帐号( Login
Name),另外一类是使用数据库的用户帐号( User Name)。登录帐
号是指能登录到 SQL Server的帐号,它属于服务器的层面,本身并不
能让用户访问服务器中的数据库,而登录者要使用服务器中的数据库
时,必须要有用户帐号才能存取数据库。
用户名要在特定的数据库内创建并关联一个登录名(当一个用户
创建时,必须关联一个登录名)。用户定义的信息存放在服务器的每
个数据库的 sysusers表中,用户设有密码同它相关联。 SQL Server通
过授权给用户指定用户可以访问的数据库对象的权限。
第十二章 SQL的安全机制
? SQL server 的标准登陆模式
1,查看登录帐号
在安装 SQL Server 2000以后,系统默认创建三个登录帐号。
进入 Enterprise Manager,展开,SQL Server组”,找到所要连接
的 SQL Server服务器;展开该服务器对应的文件夹,再展开“安全性
”文件夹,单击“登录”选项,即可看到系统创建的默认登录帐号及
已建立的其他登录帐号。
它们的含义如下:
BUILTIN\Administrators:凡是 Windows NT Server/2000中的
Administrators组的帐号都允许作为 SQL Server登录账号使用。
域名 \Administrator:允许 Windows NT Server的 Administrator帐
号作为 SQL Server登录账号使用。
sa,SQL Server系统管理员登录帐号,该账号拥有最高的管理权
限,可以执行服务器范围内的所有操作。此 SQL Server的管理员不一
定是 Windows NT Server/2000的管理员 (但通常是)。
第十二章 SQL的安全机制
? SQL server 的标准登陆模式
2,创建一个登录帐号
要登录到 SQL Server必须具有一个登录帐号,创建一个登录帐号的操
作步骤如下:
1)在 SQL Server的 Enterprise Manager下,展开,SQL Server组
”文件夹,找到要建立登录帐号的服务器并展开其文件夹,再展开“
安全性”文件夹,在“登录”选项上右击鼠标,在出现的快捷菜单中
单击“新建登录”菜单命令,打开,SQL Server登录属性”对话框。
2),名称”文本框中输入要创建的登录帐号的名称,如
,StudentAdm”,在“身份验证”选项组中,单击,SQL Server身份
验证”单选钮并输入密码,然后在“默认设置”选项组中,选择数据
库列表中的某个数据库,如,STUDENT”,表示该登录帐号默认登录
STUDENT数据库中。
3) 在该对话框中,单击“服务器角色”选项卡,在此选项卡中,
可设置登录帐号所属的服务器角色。
第十二章 SQL的安全机制
? SQL server 的标准登陆模式
2,创建一个登录帐号
4) 在对话框中,单击“数据库访问”选项卡,在此选项卡中选择
登录帐号可以访问的数据库,即选中所需数据库左面的复选框。
5) 设置完毕后,单击“确定”按钮,即可完成该登录帐号的创建

6)在步骤 2)中,如果选择,Windows身份验证”单选钮,则“名
称”文本框后面的按钮被激活,单击可打开选择 Windows用户的对话
框,。从该对话框中可选择 Windows系统的用户作为 SQL Server的登
录帐号。
查询分析器:
命令,sp_addlogin loginname,password,database
例,exec sp_addlogin ?zhx?,?aaa?,?pubs?
第十二章 SQL的安全机制
? SQL server 的标准登陆模式
服务器角色是负责管理与维护 SQL Server的组,一般指定需要管理服
务器的登录帐号属于服务器角色。 SQL Server在安装过程中定义几个
固定的服务器角色,其具体权限如下:
固定服务器角色描述
Sysadmin全称为 System Administrators,可在 SQL Server中执行任何活动
Serveradmin全称为 Server Administrators,可设置服务器范围的配置选项,关闭服务器
Setupadmin全称为 Setup Administrators,可管理连接服务器和启动过程
Securityadmin全称为 Security Administrators,可管理服务器登录,读取错误日志和更改密码
Processadmin全称为 Process Administrators,可以管理在 SQL Server中运行的进程
Dbcreator全称为 Database Creators,可以创建、更改和删除数据库
Diskadmin全称为 Disk Administrators,可以管理磁盘文件
Bulkadmin全称为 Bulk Insert Administrators,可以执行大容量插入
注意:属于 Windows NT/2000 Administrators组的帐号在 SQL Server中
被自动设置为 sysadmin服务器角色。
第十二章 SQL的安全机制
? SQL server 的标准登陆模式
3,更改、删除登录帐号属性
进入 Enterprise Manager,展开,SQL Server组”,找到所要连接的 SQL
Server服务器;展开该服务器对应的文件夹,再展开“安全性”文件夹,单
击“登录”选项,在 Enterprise Manager的右侧窗格中,可看到系统创建的
默认登录帐号及已建立的其他登录帐号。在需要更改属性的帐号上单击右键
,在出现的快捷菜单中,单击相应选项,即可可更改或删除登录帐号属性。
4,禁止登录账号
如果要暂时禁止一个使用 SQL Server身份验证的登录账号连接到 SQL
Server,只需要修改该帐户的登录密码就行了。如果要暂时禁止一个使用
Windows身份验证的登录帐户连接到 SQL Server,则应当使用企业管理器或
执行 Transact-SQL语句来实现。
1) 在 Enterprise Manager中展开服务器组,然后展开要连接的服务器。
2) 在目标服务器下面展开“安全性”文件夹,然后单击“登录”节点。
3) 在详细信息窗格中右击要禁止的登录账号,然后选择“属性”命令。
4) 当出现,SQL Server登录属性”对话框时,选择“常规”选项卡,然
后选取“拒绝访问”选项。
5) 单击“确定”按钮,使所做的设置生效。
第十二章 SQL的安全机制
? SQL server 的标准登陆模式
5,删除登录账号
如果要永久禁止使用一个登录账号连接到 SQL Server,就应当
将该登录账号删除,这可以使用企业管理器来完成。
1) 在 Enterprise Manager中,展开服务器组,然后展开要连接的
SQL Server服务器。
2) 在目标服务器下面,展开“安全性”文件夹,然后单击“登录
”节点。
3) 在详细信息窗格中右击要删除的登录账户,然后选择“删除”
命令,或者直接按下 Delete键。
4) 在弹出的对话框中单击“确定”按钮,确认登录账号的删除操
作。
第十二章 SQL的安全机制
?数据库用户
一个 SQL Server的登录帐号只有成为该数据库的用户时,对该数
据库才有访问权限。 在安装 SQL Server后,默认数据库(如 master
,tempdb,msdb等)包含两个用户,dbo和 guest。任何一个登录帐
号都可以通过 guest用户帐号来存取相应的数据库。但是当新建一个数
据库时,默认只有 dbo用户帐号而没有 guest用户帐号。
每个登录帐号在一个数据库中只能有一个用户帐号,但每个登录
帐号可以在不同的数据库中各有一个用户帐号。如果在新建登录帐号
过程中,指定它对某个数据库具有存取权限,则在该数据库中将自动
创建一个与该登录帐号同名的用户帐号。
注意,master和 tempdb数据库中的 guest用户帐号不能删除,而其他
数据库中的 guest用户帐号可以删除;登录帐号具有对某个数据库的访
问权限,并不表示该登录帐号对该数据库具有存取的权限,如果要对
数据库的对象进行插入、更新等操作,还需要设置用户帐号的权限。
第十二章 SQL的安全机制
?数据库用户
1、创建数据库的用户
1)在 Enterprise Manager中,展开 SQL Server组及其服务器。在“
数据库”文件夹中,展开某一数据库,如 STUDENT的文件夹,然后
在“用户”选项上单击鼠标右键,在弹出的快捷菜单中选择“新建数
据库用户”命令,打开新建用户对话框。
2) 单击“登录名”下拉列表框右端的下拉箭头,选择
,StudentAmd”登录帐号,此时“用户名”文本框自动显示为
,StudentAmd”。可以更改“用户名”文本框中的用户名,也可以在
“数据库角色成员”列表框中选择新建用户应该属于的数据库角色或
者删除指定的数据库用户。
3) 设置完毕后,单击“确定”按钮,即可在 STUDENT数据库中创
建一个新的用户帐号。如果不想创建用户帐号,单击“取消”按钮即
可。
第十二章 SQL的安全机制
?数据库用户
2、修改数据库的用户
在数据库中建立一个数据库用户帐号时,要为该帐号设置某种权限,可
以通过为它指定适当的数据库角色来实现。修改所设置的权限时,只需要修
改该帐号所属的数据库角色就行了。
1) 在 Enterprise Manager中展开服务器组,然后展开一个服务器。
2) 展开“数据库”文件夹,然后展开用户帐号所属的数据库。
3) 在目标数据库下面单击“用户”节点,然后在详细信息窗格中右击要修
改的用户帐号并选择“属性”命令。
4) 当出现“数据库用户属性”对话框时,重新选择用户帐号所属的数据库
角色。单击“确定”按钮。
3、删除数据库的用户
1) 在 Enterprise Manager中展开服务器组,然后展开一个服务器。
2) 展开“数据库”文件夹,然后展开要删除用户帐号所属的数据库。
3) 在目标数据库下面单击“用户”节点,然后在详细信息窗格中右击要删
除的用户帐号并选择“删除”命令或直接按 <Delete>按钮。
4) 在弹出的对话框中,单击“是”按钮,确认用户帐户删除操作。
第十二章 SQL的安全机制
?数据库角色
角色是一个强大的工具,它可以将用户集中到一个单元中,然后
对该单元应用权限。对一个角色授予、拒绝或废除权限适用于该角色
中的任何成员。可以建立一个角色来代表单位中 —类工作人员所执行
的工作,然后给这个角色授予适当的权限。
和登录帐号类似,用户帐号也可以分成组,称为数据库角色(
Database Roles)。数据库角色应用于单个数据库。在 SQL Server中
,数据库角色可分为两种:标准角色和应用程序角色。标准角色是由
数据库成员所组成的组,此成员可以是用户或者其他的数据库角色。
应用程序角色用来控制应用程序存取数据库,它本身并不包括任何成
员。
第十二章 SQL的安全机制
?数据库角色
标准角色
在创建一个数据库时,系统默认创建 10个固定的标准角色。
在 Enterprise Manager中,展开 SQL Server组及其服务器,在“数据
库”文件夹中,展开某一数据库(如 STUDENT)的文件夹,然后单
击“角色”选项,这时可在 Enterprise Manager的右侧窗格中显示出
默认的 10个标准角色,如下固定数据库角色描 述
Public 最基本的数据库角色,每个用户都属于该角色
Db_owner在数据库中有全部权限
Db_accessadmin 可以添加或删除用户
IDDb_securityadmin 可以管理全部权限、对象所有权、角色和角色成员资格
Db_ddladmin 可以发出所有 DDL语句,但不能发出 GRANT,REVOKE或 DENY语句
Db_backupoperator可以发出 DBCC,CHECKPOINT和 BACKUP语句
Db_datareader可以选择数据库内任何用户表中的所有数据
Db_datawriter可以更改数据库内任何用户表中的所有数据
Db_denydatareader不能选择数据库内任何用户表中的任何数据
Db_denydatawriter 不能更改数据库内任何用户表中的任何数据
第十二章 SQL的安全机制
?数据库角色
创建、删除新的角色
在 Enterprise Manager中,展开 SQL Server组及其服务器,在“
数据库”文件夹中,展开某一数据库(如 STUDENT)的文件夹,然
后在“角色”选项上单击鼠标右键,在弹出的快捷菜单中选择“新建
数据库角色”菜单命令,则出现“数据库角色属性 ——新建角色”对
话框。在该对话框中的“名称”文本框中输入角色的名称,在“数据
库角色类型”中选择角色的类型为标准角色,单击“添加”按钮可向
角色中添加成员;若在某一角色上单击鼠标右键,在弹出的快捷菜单
中选择“删除”即可删除指定的角色。
第十二章 SQL的安全机制
?数据库角色
应用程序角色
编写数据库应用程序时,可以定义应用程序角色,让应用程序的
操作者能用该应用程序来存取 SQL Server的数据。也就是说,应用程
序的操作者本身并不需要在 SQL Server上有登录帐号以及用户帐号,
仍然可以存取数据库,这样可以避免操作者自行登录 SQL Server。
使用 Enterprise Manager创建应用程序角色的过程与标准角色的创建
过程基本相同,就是在“数据库角色属性 ——新建角色”对话框中,
选择“应用程序角色”即可。
public数据库角色
public数据库角色是每个数据库最基本的数据库角色,每个用户
可以不属于其他 9个固定数据库角色,但是至少属于 public数据库角色
。当在数据库中添加新用户帐号时,SQL Server会自动将新用户帐号
加入 public数据库角色中。
第十二章 SQL的安全机制
?管理权限
用户是否具有对数据库存取的权力,要看其权限设置而定;但是,它
还要受其角色的权限的限制。
1、权限的种类
在 SQL Server 2000中,权限分为三类:对象权限、语句权限和隐含权
限。
1)对象权限
对象权限是指用户对数据库中的表、视图、存储过程等对象的操作权
限,相当于数据库操作语言的语句权限,例如是否允许查询、添加、
删除和修改数据等。
对象权限的具体内容包括以下三个力面:
对于表和视图,是否允许执行 SELECT,INSERT,UPDATE以及
DELETE语句。
对于表和视图的字段,是否可以执行 SELECT和 UPDATE语句。
对于存储过程,是否可以执行 EXECUTE语句。
第十二章 SQL的安全机制
?管理权限
2)语句权限
语句权限相当于数据定义语言的语句权限,这种权限专指是否允许
执行下列语句,CREATE TABLE,CREATE DEFAULT,CREATE
PROCEDURE,CREATE RULE,CREATE VIEW,BACKUP
DATABASE,BACKUP LOG。
3)隐含权限
隐含权限是指由 SQL Server预定义的服务器角色、数据库所有者(
dbo)和数据库对象所有者所拥有的权限,隐含权限相当于内置权限
,并不需要明确地授予这些权限。例如,服务器角色 sysadmin的成员
可以在整个服务器范围内从事任何操作,数据库所有者( dbo)可以
对本数据库进行任何操作。
第十二章 SQL的安全机制
?管理权限
2、权限的管理
在上面介绍的三种权限中,隐含权限是由系统预定义的,这类权
限是不需要、也不能够进行设置的。因此,权限的设置实际上就是指
对对象权限和语句权限的设置。权限可以由数 据库所有者和角色进行
管理。权限管理的内容包括以下三个方面的内容:
授予权限。即允许某个用户或角色对 —个对象执行某种操作或某
种语句。
拒绝访问。即拒绝某个用户或角色访问某个对象。即使该用户或
角色被授予这种权限,或者由于继承而获得这种权限,仍然不允许执
行相应的操作。
取消权限。即不允许某个用户或角色对一个对象执行某种操作或
某种语句。不允许与拒绝是不同的,不允许执行某操作时,可以通过
加入角色来获得允许权;而拒绝执行某操作时,就无法再通过角色来
获得允许权了。三种权限冲突时,拒绝访问权限起作用。
第十二章 SQL的安全机制
?管理权限
3、用户和角色的权限规则
1)用户权限继承角色的权限
数据库角色中可以包含许多用户,用户对数据库对象的存取权限也继
承自该角色。假设用户 Userl属于角色 Rolel,角色 Rolel已经取得了对
表 Tablel的 SELECT权限,则用户 Userl也自动取得对表 Tablel的
SELECT权限。如果 Rolel对 Tablel没有 INSERT权限,而 Userl取得了
对表 Tablel的 INSERT权限,则 Userl最终也取得对表 Tablel的 INSERT
权根。但是拒绝是优先的,只要 Rolel和 Userl中的之一有拒绝权限,
则该权限就是拒绝的。
2)用户分属不同角色
如果一个用户分属于不同的数据库角色,如用户 User1既属于角色
Rolel,又属于角色 Role2,则用户 Userl的权跟基本上是以 Rolel和
Role2的并集为准。但是只要有一个拒绝,则用户 User1的权限就是拒
绝的。