安全性是所有数据库管理系统的一个重要特征。理解安全性问题是理解数据库管理系统安全性机制的前提。
1.第一个安全性问题:当用户登录数据库系统时,如何确保只有合法的用户才能登录到系统中?这是一个最基本的安全性问题,也是数据库管理系统提供的基本功能。
在Microsoft SQL Server 2008系统中,通过身份验证模式和主体解决这个问题。
1)身份验证模式
Microsoft SQL Server 2008系统提供了两种身份验证模式:Windows身份验证模式和混合模式。
Windows身份验证模式:
在该模式中,用户通过Windows用户账户连接SQL Server时,使用Windows操作系统中的账户名和密码。
混合模式:
在混合模式中,当客户端连接到服务器时,既可能采取Windows身份验证,也可能采取SQL Server身份验证。
主体是可以请求系统资源的个体或组合过程。例如,数据库用户是一种主体,可以按照自己的权限在数据库中执行操作和使用相应的数据。
2)主体
主体是可以请求系统资源的个体或组合过程。例如,数据库用户是一种主体,可以按照自己的权限在数据库中执行操作和使用相应的数据。
Microsoft SQL Server 2008系统有多种不同的主体,不同主体之间的关系是典型的层次结构关系,位于不同层次上的主体其在系统中影响的范围也不同。位于层次比较高的主体,其作用范围比较大;位于层次比较低的主体,其作用范围比较小。
2.第二个安全性问题:当用户登录到系统中,他可以执行哪些操作、使用哪些对象和资源?
在Microsoft SQL Server 2008系统中,通过安全对象和权限设置来解决这个问题。
3.第三个安全性问题:数据库中的对象由谁所有?如果是由用户所有,那么当用户被删除时,其所拥有的对象怎么办,难道数据库对象可以成为没有所有者的“孤儿”吗?
在Microsoft SQL Server 2008系统中,这个问题是通过用户和架构分离来解决的。
安全机制的5个等级:
客户机安全机制
网络传输的安全机制
实例级别安全机制
数据库级别安全机制
对象级别安全机制
四.角色
1.固定服务器角色
v固定服务器角色是服务器级别的主体,它们的作用范围是整个服务器。
v固定服务器角色已经具备了执行指定操作的权限,可以把其他登录名作为成员添加到固定服务器角色中,这样该登录名可以继承固定服务器角色的权限。
固定服务器角色的特点
v在Microsoft SQL Server系统中,可以把登录名添加到固定服务器角色中,使登录名作为固定服务器角色的成员继承固定服务器角色的权限。
v对于登录名来说,可以选择其是否成为某个固定服务器角色的成员
按照从最低级别的角色(bulkadmin)到最高级别的角色(sysadmin)的顺序进行描述:
Bulkadmin:这个服务器角色的成员可以运行BULK INSERT语句。这条语句允许从文本文件中将数据导入到SQL Server 2008数据库中,为需要执行大容量插入到数据库的域账户而设计。
Dbcreator:这个服务器角色的成员可以创建、更改、删除和还原任何数据库。这不仅是适合助理DBA的角色,也可能是适合开发人员的角色。
Diskadmin:这个服务器角色用于管理磁盘文件,比如镜像数据库和添加备份设备。它适合助理DBA。
Processadmin:SQL Server 2008能够多任务化,也就是说可以通过执行多个进程做多个事件。例如,SQL Server 2008可以生成一个进程用于向高速缓存写数据,同时生成另一个进程用于从高速缓存中读取数据。这个角色的成员可以结束(在SQL Server 2008中称为删除)进程。
Securityadmin:这个服务器角色的成员将管理登录名及其属性。他们可以授权、拒绝和撤销服务器级权限。也可以授权、拒绝和撤销数据库级权限。另外,它们可以重置SQL Server 2008登录名的密码。
Serveradmin:这个服务器角色的成员可以更改服务器范围的配置选项和关闭服务器。例如SQL Server 2008可以使用多大内存或监视通过网络发送多少信息,或者关闭服务器,这个角色可以减轻管理员的一些管理负担。
Setupadmin:为需要管理链接服务器和控制启动的存储过程的用户而设计。这个角色的成员能添加到setupadmin,能增加、删除和配置链接服务器,并能控制启动过程。
Sysadmin:这个服务器角色的成员有权在SQL Server 2008中执行任何任务。
Public:有两大特点,第一,初始状态时没有权限;第二,所有的数据库用户都是它的成员。
2.数据库角色
三种类型的数据库角色:
固定数据库角色:微软提供的作为系统一部分的角色;
用户定义的标准数据库角色:你自己定义的角色,将Windows用户以一组自定义的权限分组;
应用程序角色:用来授予应用程序专门的权限,而非授予用户组或者单独用户。
1)固定数据库角色
微软提供了9个内置的角色,以便于在数据库级别授予用户特殊的权限集合
db_owner:该角色的用户可以在数据库中执行任何操作。
db_accessadmin:该角色的成员可以从数据库中增加或者删除用户。
db_backupopperator:该角色的成员允许备份数据库。
db_datareader:该角色的成员允许从任何表读取任何数据。
db_datawriter:该角色的成员允许往任何表写入数据。
db_ddladmin:该角色的成员允许在数据库中增加、修改或者删除任何对象(即可以执行任何DDL语句)。
db_denydatareader:该角色的成员被拒绝查看数据库中的任何数据,但是他们仍然可以通过存储过程来查看。
db_denydatawriter: 像db_denydatareader角色,该角色的成员被拒绝修改数据库中的任何数据,但是他们仍然可以通过存储过程来修改。
db_securityadmin:该角色的成员可以更改数据库中的权限和角色。
public:在SQL Server 2008中每个数据库用户都属于public数据库角色。当尚未对某个用户授予或者拒绝对安全对象的特定权限时,这该用户将据称授予该安全对象的public角色的权限,这个数据库角色不能被删除
3)应用程序角色
应用程序角色允许用户为特定的应用程序创建密码保护的角色。
五.权限
1.常用的权限
安全对象
|
常用权限
|
数据库
|
CREATE DATABASE、CREATE DEFAULT、CREATE FUNCTION、CREATE PROCEDURE、CREATE VIEW、CREATE TABLE、CREATE RULE、BACKUP DATABASE、BACKUP LOG
|
表
|
SELECT、DELETE、INSERT、UPDATE、REFERENCES
|
表值函数
|
SELECT、DELETE、INSERT、UPDATE、REFERENCES
|
视图
|
SELECT、DELETE、INSERT、UPDATE、REFERENCES
|
存储过程
|
EXECUTE、SYNONYM
|
标量函数
|
EXECUTE、REFERENCES
|
9.6.4 操作权限
权限分为3种状态:授予、拒绝、撤销,可以使用如下的语句来修改权限的状态。
授予权限(GRANT):授予权限以执行相关的操作。通过角色,所有该角色的成员继承此权限。
撤销权限(REVOKE):撤销授予的权限,但不会显示阻止用户或角色执行操作。用户或角色仍然能继承其他角色的GRANT权限。
拒绝权限(DENY):显式拒绝执行操作的权限,并阻止用户或角色继承权限,该语句优先于其他授予的权限。
1.授予权限
本语法格式:
GRANT
{ALL|statement[,..n] }
TO security_account[,..n]
ALL:表示希望给该类型的对象授予所有可用的权限。不推荐使用此选项,保留些选项仅用于向后兼容。授予ALL参数相当于授予以下权限:
如果安全对象为数据库,则ALL表示CREATE DATABASE、CREATE DEFAULT、CREATE FUNCTION、CREATE PROCEDURE、CREATE VIEW、CREATE TABLE、CREATE RULE等权限。
如果安全对象为标量函数,则ALL表示EXECUTE和REFERENCES。
如果安全对象为表值函数,则ALL表示SELECT、DELETE、INSERT、UPDATE、REFERENCES。
如果安全对象为存储过程,则ALL表示EXECUTE、SYNONYM。
如果安全对象为表,则ALL表示SELECT、DELETE、INSERT、UPDATE、REFERENCES。
如果安全对象为视图,则ALL表示SELECT、DELETE、INSERT、UPDATE、REFERENCES。
Statement:表示可以授予权限的命令,例如,CREATE DATABASE。
security_account:表示定义被授予权限的用户单位。security_account可以是SQL Server的数据库用户,可以是SQL Server的角色,也可以是Windows的用户或工作组