数据库工程师复习重点:安全管理
身份验证 操作权控制 文件操作控制 加密存储与冗余
14.1.2 数据库权限的种类及用户的分类
1、 权限的种类
(1) 对DBMS进行维护的权限;
(2) 对数据库中的对象和数据进行操作的权限。
(A) 对数据库对象的权限,包括创建、删除和修改数据库对象;
(B) 对数据库数据的操作权限,包括对表、视图数据的增、删、改、查权限。
2、 数据库用户的分类
(1) 数据库系统管理员(sa):在数据库中具有全部的权限;
(2) 数据库对象拥有者:对其所拥有的对象具有一切权限;
(3) 普通用户:只具有对数据库数据的增、删、改、查权限。
14.2 SQL Server 的安全控制
1、 用户访问SQL Server 数据库中的数据中,必须经过三个认证过程
(1) 身份认证:验证用户是否有连接到数据库服务器的“连接权”;
(2) 验证用户是否数据库的合法用户;
(3) 验证数据库用户是否具有要进行的操作的操作权限。
2、 SQL Server的用户有两种类型:
(1) Windows授权用户:来自Windows的用户或组;
(2) SQL授权用户:来自于非Windows的用户,也将这种用户称为SQL用户。
3、 SQL Server 为不同用户类型提供不同的安全认证模式:
(1) Windows 身份验证模式:允许Windows NT或Windows 2000用户连接到SQL Server,在这种模式下,SQL Server将通过Windows来获得用户信息,并对账号和密码进行重新验证,当使用Windows身份验证模式时,用户必须先登录到Windows,然后再登录到SQL Server;
(2) 混合验证模式:表示SQL Server接受Windows授权用户和SQL授权用户。
14.3 管理SQL Server 登录账户
14.3.1 系统内置的登录账户
1、 BUILTIN\Administrators:是一个Windows组账户,表示所有的Windows Administrators(系统管理员)组中的用户都可以登录到SQL Server,此组中的成员同是具有SQL Server的系统管理员权限;
2、 Sa:SQL Server验证模式的系统管理员账户;
3、 域名\Administrators: Windows的系统管理员同时也是SQL Server的合法用户,并且具有SQL Server的系统管理员权限。
14.3.2 建立登录账户
1、 使用企业管理器建立登录账户
2、 使用系统存储过程建立登录账户
(1) 建立SQL Server身份验证的登录账户:
sp_addlogin [@loginame=]’login’[,[@passwd=]’password’][,[@defdb=]’database’]
其中:
(A)[@loginame=]’login’:登录账户名;
(B)[@passwd=]’password’:登录密码;
(C)[@defdb=]’database’:连接的数据库。
(2) 建立Windows身份验证的登录账户
sp_grantlogin [@loginame=]’login’
其中:[@loginame=]’login’为要添加的Windows NT用户或组的名称,Windows NT组和用户必须用Windows NT域名限定,格式为“域\用户”
14.3.3 删除登录账户
1、 使用企业管理器删除登录账户;
2、 使用系统存储过程删除登录账户:
(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 建立数据库用户
1、 使用企业管理器建立数据库用户;
2、 使用系统存储过程建立数据库用户:
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权限种类
1、 对象权限:指用户对数据库中的表、视图等对象中数据的操作权限,相当于数据库操作语言(DML)的语句权限;
2、 语句权限:相当于数据定义语言(DDL)的语句权限,专指是否允许执行:CREATE TABLE、CREATE VIEW等与创建数据库对象有关的操作;
3、 隐含权限:指数据库管理系统预定义的服务器角色、数据库角色、数据库拥有者和数据库对象拥有者所具有的权限
14.5.2 权限的管理
权限的管理包括:
(1) 授予权限:允许用户或角色具有某种操作权;
(2) 收回权限:不允许用户或角色具有某种操作权,或收回曾经授予的权限;
(3) 拒绝访问:拒绝某用户或角色具有某种操作权限;
1、 使用企业管理器管理数据库用户权限;
2、 使用企业管理器管理语句权限;
3、 使用Transact-SQL语句管理对象权限
(1) GRANT语句:用于授权;
GRANT 对象权限名 [,…]ON{表名|视图名|存储过程名}
TO{数据库用户名|用户角色名}[,…]
(2) REVOKE语句:用于收回权限;
REVOKE 对象权限名 [,…]ON{表名|视图名|存储过程名}
TO{数据库用户名|用户角色名}[,…]
(3) 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语句
固定的服务器角色的成员是系统的登录账户,系统内置的
(1) BUILTIN\Administrators组;
(2) Sa
(3) 域名\Administrators
自动是sysadmin角色中的成员。
1、 添加固定的服务器角色成员
(1) 用企业管理器实现;
(2) 用系统存储过程实现;
sp_addsrvrolemember[@loginame=]’login’[@rolename=]’role’
其中:
[@loginame=]’login’:添加到固定服务器角色的登录名称;
[@rolename=]’role’:要将登录添加到的固定服务器角色的名称。
2、 删除固定的服务器角色成员
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角色是一个特殊的角色:
(1) 数据库中的每个用户都自动地是public角色成员,用户不能从public角色中添加和删除成员;
(2) 用户可以对这个角色进行授权。
1、添加固定的数据库角色成员
(1) 用企业管理器实现;
(2) 用系统存储过程实现;
sp_addrolemember [@rolename=]’role’,[@membername=]’security_account’
其中:
[@rolename=]’role’:当前固定数据库中的角色名称;
[@membername=]’security_account’:添加到角色中的用户名。
2、删除固定的数据库角色成员
14.6.3 用户自定义的角色
属于数据库一级的角色,用户可根据实际工作职能定义一系列角色,并给每个角色授予合适的权限。只需将数据库用户放置到合适的角色中即可。
1、建立用户自定义库角色
(1) 用企业管理器实现;
(2) 用系统存储过程实现;
sp_addrole [@rolename=]’role’,[@ownername=]’owner’
其中:
[@rolename=]’role’:新的角色名称;
[@ownername=]’owner’:新角色的所有者。
3、 为用户定义的角色授权;
4、 添加和删除用户自定义角色成员