四级数据库_14_角色与权限

第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’:新角色的所有者。


  • 为用户定义的角色授权;

添加和删除用户自定义角色成员