第14章 安全管理
14.1 安全控制
14.1.1 安全控制模型
身份验证
操作权控制
文件操作控制
加密存储与冗余
14.1.2 数据库权限的种类及用户的分类
- 权限的种类
- 对DBMS进行维护的权限;
- 对数据库中的对象和数据进行操作的权限。
- 对数据库对象的权限,包括创建、删除和修改数据库对象;
- 对数据库数据的操作权限,包括对表、视图数据的增、删、改、查权限。
-
数据库用户的分类
- 数据库系统管理员(sa):在数据库中具有全部的权限;
- 数据库对象拥有者:对其所拥有的对象具有一切权限;
- 普通用户:只具有对数据库数据的增、删、改、查权限。
14.2 SQL Server 的安全控制
- 用户访问SQL Server 数据库中的数据中,必须经过三个认证过程
- 身份认证:验证用户是否有连接到数据库服务器的“连接权”;
- 验证用户是否数据库的合法用户;
- 验证数据库用户是否具有要进行的操作的操作权限。
-
SQL Server的用户有两种类型:
- Windows授权用户:来自Windows的用户或组;
- SQL授权用户:来自于非Windows的用户,也将这种用户称为SQL用户。
-
SQL Server 为不同用户类型提供不同的安全认证模式:
- Windows 身份验证模式:允许Windows NT或Windows 2000用户连接到SQL Server,
- 在这种模式下,SQL Server将通过Windows来获得用户信息,并对账号和密码进行重新验证,当使用Windows身份验证模式时,用户必须先登录到Windows,然后再登录到SQL Server;
-
混合验证模式:表示SQL Server接受Windows授权用户和SQL授权用户。
14.3 管理SQL Server 登录账户
14.3.1 系统内置的登录账户
- BUILTIN\Administrators:
- 是一个Windows组账户,表示所有的Windows Administrators(系统管理员)组中的用户都可以登录到SQL Server,此组中的成员同是具有SQL Server的系统管理员权限;
-
Sa:SQL Server验证模式的系统管理员账户;
-
域名\Administrators: Windows的系统管理员同时也是SQL Server的合法用户,并且具有SQL Server的系统管理员权限。
14.3.2 建立登录账户
- 使用企业管理器建立登录账户
- 使用系统存储过程建立登录账户
-
建立SQL Server身份验证的登录账户:
-
sp_addlogin [@loginame=]’login’[,[@passwd=]’password’][,[@defdb=]’database’]
其中:
(A)[@loginame=]’login’:登录账户名;
(B)[@passwd=]’password’:登录密码;
(C)[@defdb=]’database’:连接的数据库。
-
建立Windows身份验证的登录账户
sp_grantlogin [@loginame=]’login’
其中:
[@loginame=]’login’为要添加的Windows NT用户或组的名称,
Windows NT组和用户必须用Windows NT域名限定,格式为“域\用户”
14.3.3 删除登录账户
- 使用企业管理器删除登录账户;
- 使用系统存储过程删除登录账户:
(1)删除SQL Server身份验证的登录账户:
sp_droplogin [@loginame=]’login’
其中:[@loginame=]’login’:将被删除的登录账户名;
(2)删除Windows身份验证的登录账户
sp_revokelogin [@loginame=]’login’
其中:
[@loginame=]’login’为要删除的Windows NT用户或组的名称,
Windows NT组和用户必须用Windows NT域名限定,格式为“域\用户”
14.4 管理数据库用户
14.4.1 建立数据库用户
- 使用企业管理器建立数据库用户;
- 使用系统存储过程建立数据库用户:
sp_adduser[@ loginame=]’login’[,[@name_in_db=]’user’][,[@grpname=]’group’]
其中:
(1)[@ loginame=]’login’:登录账户名,login必须是已有的SQL Server登录账户或Windows NT用户名
(2)[@name_in_db=]’user’:新数据库用户名,如没有指定,则user与login名相同;
(3)[@grpname=]’group’:角色名,新用户自动地成为此角色的成员,group必须是当前数据库已有的角色。
14.4.2 删除数据库用户
1、使用企业管理器删除数据库用户;
2、使用系统存储过程建立数据库用户:
sp_dropuser[@name_in_db=]’user’
14.5 管理权限
14.5.1 SQL Server权限种类
- 对象权限:
- 指用户对数据库中的表、视图等对象中数据的操作权限,
- 相当于数据库操作语言(DML)的语句权限;
-
语句权限:
- 相当于数据定义语言(DDL)的语句权限,
- 专指是否允许执行:CREATE TABLE、CREATE VIEW等与创建数据库对象有关的操作;
-
隐含权限:
- 指数据库管理系统预定义的服务器角色、数据库角色、数据库拥有者和数据库对象拥有者所具有的权限
14.5.2 权限的管理
权限的管理包括:
- 授予权限:允许用户或角色具有某种操作权;
- 收回权限:不允许用户或角色具有某种操作权,或收回曾经授予的权限;
- 拒绝访问:拒绝某用户或角色具有某种操作权限;
-
使用企业管理器管理数据库用户权限;
- 使用企业管理器管理语句权限;
-
使用Transact-SQL语句管理对象权限
- GRANT语句:用于授权;
GRANT 对象权限名 [,…]ON{表名|视图名|存储过程名}
TO{数据库用户名|用户角色名}[,…]
-
REVOKE语句:用于收回权限;
REVOKE 对象权限名 [,…]ON{表名|视图名|存储过程名}
TO{数据库用户名|用户角色名}[,…]
-
DENY语句:用于拒绝权限。
DENY 对象权限名 [,…]ON{表名|视图名|存储过程名}
TO{数据库用户名|用户角色名}[,…]
4、使用Transact-SQL语句管理语句权限
(1)授权语句:
GRANT 对象权限名 [,…] TO {数据库用户名|用户角色名}[,…]
(2)收权语句;
REVOKE 对象权限名 [,…] FROM {数据库用户名|用户角色名}[,…]
(3)拒绝权限。
DENY 对象权限名 [,…] TO {数据库用户名|用户角色名}[,…]
14.6 角色(数据库中具有相同权限的一组用户)
14.6.1 固定的服务器角色
是在服务器级上定义,这些角色具有完成特定服务器级管理活动的权限,
用户不能添加、删除或更改固定的服务器角色。
用户的登录账户可以添加到固定的服务器角色中,使其成为服务器角色中的成员,从而具有服务器角色的权限。
固定的服务器角色 | 描述 |
Sysadmin | 可在SQL Server中进行任何活动,该角色的权限包含了所有其它固定的服务器角色权限 |
Serveradmin | 配置服务器范围的设置 |
Setupadmin | 添加和删除链接服务器,并执行某些系统存储过程 |
Securityadmin | 管理服务器登录账户 |
Processadmin | 管理在SQL Server实例中运行的进程 |
Dbcreator | 创建、更改和删除数据库 |
Diskadmin | 管理磁盘文件 |
bulkadmin | 执行BULK INSERT语句 |
固定的服务器角色的成员是系统的登录账户,系统内置的
- BUILTIN\Administrators组;
- Sa
- 域名\Administrators
自动成为sysadmin角色中的成员。
-
添加固定的服务器角色成员
- 用企业管理器实现;
- 用系统存储过程实现;
sp_addsrvrolemember[@loginame=]’login’[@rolename=]’role’
其中:
[@loginame=]’login’:添加到固定服务器角色的登录名称;
[@rolename=]’role’:要将登录添加到的固定服务器角色的名称。
- 删除固定的服务器角色成员
14.6.2 固定的数据库角色
是在数据库级别上定义,用户不能添加、删除或更改固定的服务器角色。
用户的登录账户可以添加到固定的数据库角色中,使其成为成员,从而具有数据库角色的权限。
固定的数据库角色 | 描述 |
Db_owner | 在数据库中拥有全部权限 |
Db_accessadmin | 可以添加或删除用户ID |
Db_securityadmin | 可以管理数据库角色和角色成员,并管理数据库中的语句权限和对象权限 |
Db_ddladmin | 可以建立、修改和删除数据库对象(运行所有的DDL语句) |
Db_backupoperator | 可以进行数据库的备份、恢复操作 |
Db_datareader | 可以查询数据库中所有用户表中的数据 |
Db_datawriter | 可以更改数据库中所有用户表中的数据 |
Db_denydatareader | 不允许查询数据库中所有用户表中的数据 |
Db_denydatawriter | 不允许更改数据库中所有用户表中的数据 |
public | 默认不具有任何权限,但用户可对此角色进行授权 |
其中public角色是一个特殊的角色:
- 数据库中的每个用户都自动地是public角色成员,用户不能从public角色中添加和删除成员;
- 用户可以对这个角色进行授权。
1、添加固定的数据库角色成员
- 用企业管理器实现;
- 用系统存储过程实现;
sp_addrolemember [@rolename=]’role’,[@membername=]’security_account’
其中:
[@rolename=]’role’:当前固定数据库中的角色名称;
[@membername=]’security_account’:添加到角色中的用户名。
- 删除固定的数据库角色成员
14.6.3 用户自定义的角色
属于数据库一级的角色,用户可根据实际工作职能定义一系列角色,并给每个角色授予合适的权限。
只需将数据库用户放置到合适的角色中即可。
1、建立用户自定义库角色
- 用企业管理器实现;
- 用系统存储过程实现;
sp_addrole [@rolename=]’role’,[@ownername=]’owner’
其中:
[@rolename=]’role’:新的角色名称;
[@ownername=]’owner’:新角色的所有者。
-
为用户定义的角色授权;
添加和删除用户自定义角色成员