SQL Server 数据库安全之角色


一直以来数据库用户名为了方便,都是直接给与用户db_owner权限,这种做法是依然存在安全隐患,看看db_owner角色的权限说明

db_owner

db_owner 固定数据库角色的成员可以执行数据库的所有配置和维护活动,还可以删除 SQL Server中的数据库。 (在 SQL Database  SQL 数据仓库中,某些维护活动需要服务器级别权限,并且不能由 db_owners执行。)

public

 

 

服务器级的固定角色

SQL Server 提供服务器级角色以帮助你管理服务器上的权限。 这些角色是可组合其他主体的安全主体。 服务器级角色的权限作用域为服务器范围。 角色类似于 Windows 操作系统中的。)

提供固定服务器角色是为了方便使用和向后兼容。 应尽可能分配更具体的权限。

SQL Server 提供了九种固定服务器角色。 无法更改授予固定服务器角色(public 角色除外)的权限。  SQL Server 2012 (11.x)开始,您可以创建用户定义的服务器角色,并将服务器级权限添加到用户定义的服务器角色。

 

你可以将服务器级主体( SQL Server 登录名、Windows 帐户和 Windows 组)添加到服务器级角色。 固定服务器角色的每个成员都可以将其他登录名添加到该同一角色。 用户定义的服务器角色的成员则无法将其他服务器主体添加到角色。

 

 

服务器级的固定角色

描述

sysadmin

sysadmin 固定服务器角色的成员可以在服务器上执行任何活动。

serveradmin

serveradmin 固定服务器角色的成员可以更改服务器范围的配置选项和关闭服务器。

securityadmin

securityadmin 固定服务器角色的成员可以管理登录名及其属性。 他们可以 GRANTDENY  REVOKE 服务器级权限。 他们还可以 GRANTDENY  REVOKE 数据库级权限(如果他们具有数据库的访问权限)。 此外,他们还可以重置 SQL Server 登录名的密码。

 

重要提示: 授予 数据库引擎 的访问权限和配置用户权限的能力使得安全管理员可以分配大多数服务器权限。 securityadmin 角色应视为与 sysadmin 角色等效。

processadmin

processadmin 固定服务器角色的成员可以终止在 SQL Server 实例中运行的进程。

setupadmin

setupadmin 固定服务器角色的成员可以使用 Transact-SQL 语句添加和删除链接服务器。 (使用Management Studio 时需要 sysadmin 成员资格。)

bulkadmin

bulkadmin 固定服务器角色的成员可以运行 BULK INSERT 语句。

diskadmin

diskadmin 固定服务器角色用于管理磁盘文件。

dbcreator

dbcreator 固定服务器角色的成员可以创建、更改、删除和还原任何数据库。

public

每个 SQL Server 登录名都属于 public 服务器角色。 如果未向某个服务器主体授予或拒绝对某个安全对象的特定权限,该用户将继承授予该对象的 public 角色的权限。 只有在希望所有用户都能使用对象时,才在对象上分配 Public 权限。 你无法更改具有 Public 角色的成员身份。

 

注意: public 与其他角色的实现方式不同,可通过 public 固定服务器角色授予、拒绝或调用权限。

数据库默认角色列表:

db_owner

db_owner 固定数据库角色的成员可以执行数据库的所有配置和维护活动,还可以删除 SQL Server中的数据库。 (在 SQL Database  SQL 数据仓库中,某些维护活动需要服务器级别权限,并且不能由 db_owners执行。)

db_securityadmin

db_securityadmin 固定数据库角色的成员可以修改角色成员身份和管理权限。 向此角色中添加主体可能会导致意外的权限升级。

db_accessadmin

db_accessadmin 固定数据库角色的成员可以为 Windows 登录名、Windows 组和 SQL Server 登录名添加或删除数据库访问权限。

db_backupoperator

db_backupoperator 固定数据库角色的成员可以备份数据库。

db_ddladmin

db_ddladmin 固定数据库角色的成员可以在数据库中运行任何数据定义语言 (DDL) 命令。

db_datawriter

db_datawriter 固定数据库角色的成员可以在所有用户表中添加、删除或更改数据。

db_datareader

db_datareader 固定数据库角色的成员可以从所有用户表中读取所有数据。

db_denydatawriter

db_denydatawriter 固定数据库角色的成员不能添加、修改或删除数据库内用户表中的任何数据。

db_denydatareader

db_denydatareader 固定数据库角色的成员不能读取数据库内用户表中的任何数据。

SQL Database 和 SQL 数据仓库的特殊角色

这些数据库角色仅存在于虚拟 master 数据库中。 他们的权限仅限于在 master 中执行的操作。 只能向这些角色添加 master 中的数据库用户。 无法向这些角色添加登录名,但可以基于登录名创建用户,然后向角色添加用户。 也可以向这些角色添加 master 中包含的数据库用户。

角色名称

描述

dbmanager

可以创建和删除数据库。 创建数据库的 dbmanager 角色的成员将成为该数据库的所有者,从而让该用户可作为 dbo 用户连接到该数据库。 Dbo 用户具有数据库中的所有数据库权限。 Dbmanager 角色的成员不一定具有访问非他们所有的数据库的权限。

loginmanager

可以创建和删除虚拟 master 数据库中的登录名。

 

参考这个列表,尝试规范一下角色分配

分配这两个角色

db_datawriter

db_datawriter 固定数据库角色的成员可以在所有用户表中添加、删除或更改数据。

db_datareader

db_datareader 固定数据库角色的成员可以从所有用户表中读取所有数据。

public

 

分配过后,,可以对表数据进行增删该查

按要求无法执行drop

似乎已经达到基本目的,继续测试

发现无法执行存储过程,报错信息如下:

查资料:

    1. ---------------------------------------------------------
    2. -- 创建用户角色,给角色赋存储过程执行权限, 将角色赋预某用户
    3. use [YOUR DB NAME]
    4. -- 建角色[db_YourDBName_Executor]
    5. create role [db_YourDBName_Executor] AUTHORIZATION [dbo];
    6. -- 授予角色执行的权限
    7. grant exec to [db_YourDBName_Executor];
    8. -- 将角色授予用户
    9. exec sp_addrolemember N'db_YourDBName_Executor',N'karl.li'
    10. ----------------------------------------------------------
    11. -- 给用户赋存储过程查看定义权限
    12. use [YOUR DB NAME]
    13. GRANT VIEW DEFINITION ON SCHEMA :: dbo to [Your User Name]
---------------------------------------------------------
GarsonZhang www.yesdotnet.com

来自 <https://blog.csdn.net/keenweiwei/article/details/48173765>

参考此写法,达到效果

执行以后能看到数据库角色中多了一个:

用户映射中,已经赋予了角色

分析代码:第11行 给用户赋存储过程查看定义权限

    1. -- 给用户赋存储过程查看定义权限
    2. use [YOUR DB NAME]
    3. GRANT VIEW DEFINITION ON SCHEMA :: dbo to [Your User Name]
---------------------------------------------------------
GarsonZhang www.yesdotnet.com

如果不执行这段代码,最直接的效果就是无法查看存储过程定义

查看配置:

数据库→安全性→架构→dbo→属性

 

 

 

 

 

 

版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
YES开发框架
上一篇:SQL字符串逗号隔开为表结构ufn_SplitEx
下一篇:在 SA 和 Windows 等账户都被禁用的情况下如何登录?
评论列表

发表评论

评论内容
昵称:
关联文章

SQL Server 数据库安全角色
GZDBHelper连接SQL Server 数据库
Python使用SQL Server数据库
sql server系统表详细说明 sys.system_objects
SQL Server获得所有数据库,所有表试图和字段
sql server系统表详细说明 sys.all_columns
sql server系统表详细说明 sys.server_triggers
sql server系统表详细说明 sys.sql_modules
SQL Server 数据库类型和.NET数据类型映射关系
sql server系统表详细说明 sys.columns
sql server系统表详细说明 sys.tables
sql server系统表详细说明 sys.stats
sql server系统表详细说明 sys.parameters
sql server系统表详细说明 sys.system_parameters
sql server系统表详细说明 sys.all_parameters
sql server系统表详细说明 sys.partitions
sql server系统表详细说明 sys.masked_columns
sql server系统表详细说明 sys.table_types
sql server系统表详细说明 sys.triggers
sql server系统表详细说明 sys.system_columns

联系我们
联系电话:15090125178(微信同号)
电子邮箱:garson_zhang@163.com
站长微信二维码
微信二维码