您的位置:首页 > 数据库

SQL Server 安全篇——SQL Server 安全模型(3)——数据库级别安全性

2018-01-22 11:03 351 查看
 

本文属于SQL Server安全专题系列

 接上文SQL
Server 安全篇——SQL Server 安全模型(2)——实例级别安全性

 在数据库层面,以授权到安全主体来实现安全性。 相对于服务器级别,数据库级别称为数据库用户和数据库角色。

用户:

 通常情况下,数据库用户是从实例层面创建的登录名来实现。相同实例下,一个登录名可以映射到多个数据库用户中,并且可以单独授权到数据库层面。从SQL 2012开始,也可以创建没有登录名的用户(包含数据库)

带有登录名的用户:

通过SSMS或者T-SQL来创建用户,一般需要关联到一个被配置好权限的实例层面登录。常用的选项有:

DEFAULT_SCHEMA:用户的默认架构,将在后续介绍。

ALLOW_ENCRYPTED_VALUE_MODIFICATIONS:允许在大容量复制(bulk copy)中使用数据加密。在后续章节介绍。

比如下面例子:在AdventureWorks2016CTP3中创建一个用户Danni,关联到用户Danni登录,并且默认架构为Sales:

USE AdventureWorks2016CTP3
GO
CREATE USER Danni FOR LOGIN Danni  WITH DEFAULT_SCHEMA =  Sales  ;

虽然没有强制规定必须与登录名一模一样,但是作为良好的管理来说应该保持一致,如果不指定默认架构,则默认为dbo。

不需要登录名的用户:

 创建不带登录名的用户时,用户要么映射到Windows安全主体,要么使用SQL Server身份验证, 如果使用身份验证,前提条件是数据库必须已经配置为包含数据库,具体内容可见:包含的数据库
这种情况下可用选项有:

DEFAULT_SCHEMA/ALLOW_ENCRYPTED_VALUE_MODIFICATIONS:同上。

DEFAULT_LANGUAGE:用户使用的默认语言。

SID:仅对SQL Server身份验证有效,指定用户关联的SID,多个库的同一个用户使用相同的SID,特别适合在灾难恢复和AlwaysON环境。
例子:创建一个叫做Phil用户,用户来自于Windows安全主体(域名\登录名:cartersecuresafe\phil),默认架构dbo。

USE AdventureWorks2016CTP3
GO
CREATE USER [cartersecuresafe\phil]  WITH DEFAULT_SCHEMA=dbo ;


数据库角色:

 跟服务器角色类似,数据库也有内建角色,这些角色也具有预定好的一系列权限。也称为固定数据库角色(fixed database roles)。固定数据库角色跟服务器角色一样,只能增删用户,不能修改权限。

固定数据库角色
角色 描述
db_accessadmin成员可在数据库中增删数据库用户。
db_backupoperator默认为了备份所用,对第三方工具不可用,第三方工具一般需要sysadmin权限。
db_datareader成员可以执行select命令在所有的表,可以使用DENY来禁用某些表的SELECT,因为DENY总覆盖GRANT。
db_datawriter成员可以执行DML语句到库的任何一个表。同理可以使用DENY来控制。
db_denydatareader与db_datareader相反,拒绝对库的所有select权限。
db_denydatawriter与db_datawriter相反。
db_ddladmin可以执行DDL命令,相对少用。
db_owner库的所有者,拥有库的所有权限。
db_securityadmin可以对用户,针对安全对象进行GRANT 、DENY、REVOKE,也可以修改除db_onwer之外的所有成员。
 除了固定数据库角色之外,也可以在数据库层面创建用户自定义角色。比如下面案例,可以创建一个SalesRole角色,属于dbo并只有Danni用户,对Sales架构的表有增删改查权限:

USE AdventureWorks2016CTP3
GO
--创建角色
CREATE ROLE SalesRole AUTHORIZATION dbo ;
GO
--对角色授权
GRANT DELETE ON SCHEMA::Sales TO SalesRole ;
GRANT INSERT ON SCHEMA::Sales TO SalesRole ;
GRANT SELECT ON SCHEMA::Sales TO SalesRole ;
GRANT UPDATE ON SCHEMA::Sales TO SalesRole ;
--添加成员
ALTER ROLE SalesRole ADD MEMBER  Danni  ;


小结:

 SQL Server实际的安全层级相当复杂。基于角色的安全性可以简化管理工作。另外充分合理地使用两种授权:Windows身份验证和SQL Server身份验证。能够更好地降低安全风险,另外建议优先使用Windows身份验证。
 SQL Server数据库引擎通常使用登录来实现实例级别的身份验证。一般登录名在数据库层会有用户对应,但是在包含数据库中则不需要非要有登录名。

 下一篇会介绍SQL Server审计。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息