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

2018-01-24 10:32:18来源:http://blog.csdn.net/dba_huangzj/article/details/79033893作者:黄钊吉的博客人点击

分享

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


用户:


通常情况下,数据库用户是从实例层面创建的登录名来实现。相同实例下,一个登录名可以映射到多个数据库用户中,并且可以单独授权到数据库层面。从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 DanniWITH 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 MEMBERDanni;
小结:


SQL Server实际的安全层级相当复杂。基于角色的安全性可以简化管理工作。另外充分合理地使用两种授权:Windows身份验证和SQL Server身份验证。能够更好地降低安全风险,另外建议优先使用Windows身份验证。



SQL Server数据库引擎通常使用登录来实现实例级别的身份验证。一般登录名在数据库层会有用户对应,但是在包含数据库中则不需要非要有登录名。



下一篇会介绍SQL Server审计。


相关文章

    无相关信息

微信扫一扫

第七城市微信公众平台