Rea*_*ces 24 sql-server permissions
我正在接管一个项目,该项目涉及删除和限制我们服务器场中所有数据库用户的权限。(娱乐时间)
当前受限的权限之一是 db_owner 权限。
正在逐案审查此权限,但常见的更改是将 db_owner 权限替换为以下内容:
我想定义两者之间的确切区别(通知客户)。
但是,据我所知,两者之间的区别应该是:
所以实际上他们会失去:
[ALTER ANY USER]
[CREATE SCHEMA]
[BACKUP DATABASE], [BACKUP LOG], [CHECKPOINT]
[ALTER ANY APPLICATION ROLE],[ALTER ANY ROLE]
[DROP DATABASE]
一旦 db_owner 被上述四个角色取代,用户还有什么会丢失的吗?
这实际上在安全方面起到了很大的作用吗?
IT *_*nja 24
从我测试和阅读的内容中可以看出,在大多数情况下,您的列表看起来是准确的,除了db_ddladminDOES 允许您CREATE SCHEMA. 我确实确认您列出的其他安全权限确实被拒绝了。
仅使用 DDLADMIN 拒绝:
[ALTER ANY USER]
[BACKUP DATABASE], [BACKUP LOG],[CHECKPOINT]
[ALTER ANY APPLICATION ROLE], [ALTER ANY ROLE]
[DROP DATABASE]
注意到。. .
db_datareader将允许SELECT访问所有表db_datarwriter将允许INSERT、UPDATE和DELETE访问所有表db_executor将允许EXECUTE访问所有可执行对象注意: 由于从 2005 年到 2014 年,您拥有如此多不同版本的 SQL Server,因此最好先让一小部分用户对此进行测试,看看谁会尖叫着解决任何问题等。
他们拥有的具有此角色的对象不会归 DBO 所有,因此如果此级别的某些内容出现问题,您可能必须处理所有权更改问题。我不是 100% 肯定这会是一个问题,但为了以防万一,值得一提。
资料来源:所有权链
有了这个角色(可能会因 SQL Server 的版本而异),他们可能能够将当前数据库中定义的 SQL 安全原则添加到他们仍然拥有的对象中,只是不是所有对象(他们不拥有的对象)或添加新服务器-level 将主体定义为 DB 级别。
注意: 由于从 2005 年到 2014 年,您拥有如此多不同版本的 SQL Server,因此最好先让一小部分用户对此进行测试,看看谁会尖叫着解决任何问题等。
没有 DBO 角色可能会阻止某些 SSMS 设计器 GUI 界面(SQL Server 版本不同)在没有错误的情况下填充或打开(例如,当通过 GUI 修改表或列时),即使通过 T-SQL 工作并且权限已到位. 在某些版本的 SQL Server 中,这可以通过允许出现问题的GRANT VIEW DEFINITION位置来解决,也可以仅在某些版本的 SQL Server 上发出警告。
资源
db_ddladmin 角色不允许在 SSMS 中使用“设计”功能
“我们尽量避免在他们的 QA 数据库中为用户/开发人员提供 dbo。这样做的问题之一是他们仍然需要能够创建和修改数据库对象,例如用户表。许多开发人员都不熟悉MS SQL 因此倾向于坚持使用 GUI (SSMS) 进行此类工作。当我们授予他们 db_ddladmin (不是 dbo) 并且他们不再能够通过表设计器 GUI 修改表或列时,问题就出现了。相反,他们必须花额外的时间来学习 TSQL 命令及其语法(他们可能永远不会再需要这些)或参与 DBA 团队,这会占用我们其他活动的时间。
我不知道这是错误还是功能请求,但我认为这是一个错误,因为用户有足够的权限通过 TSQL 更改表,但 GUI 向他们提供消息说明:
"您不是以数据库所有者或系统管理员身份登录。您可能无法保存对不属于您的表的更改。AND “表
[schema].[table]设置为只读,用户对此表没有足够的权限。 ”跟踪似乎指向检查 is_member('db_owner') 这将排除 db_ddladmin 的成员,即使他们实际上有修改对象的权限。Microsoft SQL Server 管理工作室”
DBA 代理于 2010 年 1 月 25 日上午 7:06 发表
我遇到了类似的问题,并通过执行以下授权设法解决了它
Run Code Online (Sandbox Code Playgroud)GRANT view definition on schema:: <schemaname> to <username>
由于您声明正在逐案审查
当前受限的权限之一是 db_owner 权限。
正在逐案审查此权限,但常见的更改是将 db_owner 权限替换为以下内容:
- db_datareader
- db_datawriter
- db_ddladmin
- db_executor
您是否考虑过为每个人需要的更多“所有对象”数据库级访问创建额外的自定义角色,而不是授予他们db_ddladmin角色,因为这可能会给他们提供比他们实际需要的更多的数据库级对象。
我通常只提供他们完成工作所需的内容,如果对 DB 级对象访问 DB 中的所有对象有“通常”或“标准”需求,我会创建一个自定义 DB 角色,类似于db_executor但请看我下面的例子。通过这种方式,如果您没有在 DB 中获得明确的对象级别以确保他们的安全,您可以向人们授予他们真正需要的特定 DB 中的所有 DB 对象。
----Custom Database Roles
/* CREATE A NEW ROLE -- Execute to all stored procs including newly created ones*/
-- Database specific
CREATE ROLE db_All_StoredProc_Execute
GRANT EXECUTE TO db_All_StoredProc_Execute
/* CREATE A NEW ROLE -- Alter to all stored procs including newly created ones*/
-- Database specific
CREATE ROLE db_All_StoredProc_Alter
GRANT ALTER ANY SCHEMA TO db_All_StoredProc_Alter
/* CREATE A NEW ROLE -- View Definition to all stored procs including newly created ones*/
-- Database specific
CREATE ROLE db_All_StoredProc_View
GRANT VIEW DEFINITION TO db_All_StoredProc_View
/* CREATE A NEW ROLE - Any schema alter and create procedure permissions */
-- Database specific
CREATE ROLE db_All_CreateProc_AlterSchema
GRANT ALTER ANY SCHEMA TO db_All_CreateProc_AlterSchema
GRANT CREATE PROCEDURE TO db_All_CreateProc_AlterSchema
GO
/* CREATE A NEW ROLE - Any schema alter and create table permissions */
-- Database specific
CREATE ROLE db_All_CreateTable_AlterSchema
GRANT ALTER ANY SCHEMA TO db_All_CreateTable_AlterSchema
GRANT CREATE TABLE TO db_All_CreateTable_AlterSchema
/* CREATE A NEW ROLE - Any schema alter and create function permissions */
-- Database specific
CREATE ROLE db_All_CreateFunction_AlterSchema
GRANT ALTER ANY SCHEMA TO db_All_CreateFunction_AlterSchema
GRANT CREATE FUNCTION TO db_All_CreateFunction_AlterSchema
/* CREATE A NEW ROLE - Any schema alter and create aggregate permissions */
-- Database specific
CREATE ROLE db_All_CreateAggregate_AlterSchema
GRANT ALTER ANY SCHEMA TO db_All_CreateAggregate_AlterSchema
GRANT CREATE AGGREGATE TO db_All_CreateAggregate_AlterSchema
/* CREATE A NEW ROLE - Any schema alter and create view permissions */
-- Database specific
CREATE ROLE db_All_CreateView_AlterSchema
GRANT ALTER ANY SCHEMA TO db_All_CreateView_AlterSchema
GRANT CREATE VIEW TO db_All_CreateView_AlterSchema
/* CREATE A NEW ROLE - Any schema alter and create schema permissions */
-- Database specific
CREATE ROLE db_All_CreateSchema_AlterSchema
GRANT ALTER ANY SCHEMA TO db_All_CreateSchema_AlterSchema
GRANT CREATE SCHEMA TO db_All_CreateSchema_AlterSchema
Run Code Online (Sandbox Code Playgroud)
我还想共享一个 db_DDLAdmin_Restriction 角色,您可能需要考虑考虑使用明确的其他方式创建DENY以限制db_ddladmin授予访问权限的内容,因此您至少可以在授予他们此角色的数据库上创建此角色并DENY为实际对象类型设置显式等,您不希望他们访问。
例如,如果您知道他们肯定会创建存储过程和函数,则可以排除DENY CREATE FUNCTION, DENY CREATE PROCEDURE, DENY ALTER ANY SCHEMA。
---Create ddladmin restriction custom DB role
DENY ALTER ANY ASSEMBLY TO db_DDLAdmin_Restriction
DENY ALTER ANY ASYMMETRIC KEY TO db_DDLAdmin_Restriction
DENY ALTER ANY CERTIFICATE TO db_DDLAdmin_Restriction
DENY ALTER ANY CONTRACT TO db_DDLAdmin_Restriction
DENY ALTER ANY DATABASE DDL TRIGGER TO db_DDLAdmin_Restriction
DENY ALTER ANY DATABASE EVENT NOTIFICATION TO db_DDLAdmin_Restriction
DENY ALTER ANY DATASPACE TO db_DDLAdmin_Restriction
DENY ALTER ANY FULLTEXT CATALOG TO db_DDLAdmin_Restriction
DENY ALTER ANY MESSAGE TYPE TO db_DDLAdmin_Restriction
DENY ALTER ANY REMOTE SERVICE BINDING TO db_DDLAdmin_Restriction
DENY ALTER ANY ROUTE TO db_DDLAdmin_Restriction
DENY ALTER ANY SCHEMA TO db_DDLAdmin_Restriction
DENY ALTER ANY SERVICE TO db_DDLAdmin_Restriction
DENY ALTER ANY SYMMETRIC KEY TO db_DDLAdmin_Restriction
DENY CHECKPOINT TO db_DDLAdmin_Restriction
DENY CREATE AGGREGATE TO db_DDLAdmin_Restriction
DENY CREATE DEFAULT TO db_DDLAdmin_Restriction
DENY CREATE FUNCTION TO db_DDLAdmin_Restriction
DENY CREATE PROCEDURE TO db_DDLAdmin_Restriction
DENY CREATE QUEUE TO db_DDLAdmin_Restriction
DENY CREATE RULE TO db_DDLAdmin_Restriction
DENY CREATE SYNONYM TO db_DDLAdmin_Restriction
DENY CREATE TABLE TO db_DDLAdmin_Restriction
DENY CREATE TYPE TO db_DDLAdmin_Restriction
DENY CREATE VIEW TO db_DDLAdmin_Restriction
DENY CREATE XML SCHEMA COLLECTION TO db_DDLAdmin_Restriction
DENY REFERENCES TO db_DDLAdmin_Restriction
GO
Run Code Online (Sandbox Code Playgroud)
使用 SQL 脚本列出所有权限,我为每个案例创建了用户。
EXECUTE AS USER = 'test_user'
SELECT
permission_name
FROM fn_my_permissions(null, 'DATABASE')
ORDER BY subentity_name, permission_name
REVERT;
Run Code Online (Sandbox Code Playgroud)
然后我比较了结果,并使用主要来自msdn 的文档(任何未特别引用的引用来自 msdn 链接)来到以下列表。
下面是一些我用来通知那些将失去 dbo 权限的人他们究竟失去了什么的文档。
改变
授予更改特定安全对象的属性(所有权除外)的能力。当授予范围时,ALTER 还授予更改、创建或删除包含在该范围内的任何安全的能力。例如,模式的 ALTER 权限包括从模式创建、更改和删除对象的能力。
更改任何应用程序角色
更改任何数据库审计
更改任何角色
更改任何用户
授予创建、更改或删除数据库安全对象的单个实例的能力。例如,ALTER ANY SCHEMA 赋予在数据库中创建、更改或删除任何模式的能力。
应用程序角色是数据库主体,使应用程序能够以其自己的、类似于用户的权限运行。
审核SQL Server 或 SQL Server 数据库的实例涉及跟踪和记录系统上发生的事件。数据库级审计规范对象属于审计。您可以为每个 SQL Server 数据库的每个审计创建一个数据库审计规范。
数据库角色用于轻松管理数据库中的权限,SQL Server 提供了多个角色,这些角色是将其他主体分组的安全主体。它们就像 Microsoft Windows 操作系统中的组。数据库级角色在其权限范围内是数据库范围的。
身份验证
在 msdn 中找到。
AUTHENTICATE 和 AUTHENTICATE SERVER 权限仅在跨数据库和服务器访问(分别)场景中使用 EXECUTE AS 时使用。
备份数据库
备份日志
连接复制
用于数据库复制权限。
控制
授予受让人类似所有权的能力。受让人实际上拥有对安全对象的所有定义权限。已被授予 CONTROL 的主体还可以授予对安全对象的权限。
创建角色
授予受让人创建数据库安全的能力。
展示计划
Showplan 权限用于各种 Showplan SET 语句选项,当它们与 Transact-SQL 批处理一起使用时。
订阅查询通知
查询通知构建在 Service Broker 基础架构之上,允许在数据发生更改时通知应用程序。此功能对于提供来自数据库的信息缓存的应用程序特别有用,例如 Web 应用程序,并且需要在源数据更改时收到通知。
取得所有权
使受让人能够获得授予它的担保物的所有权。
查看数据库状态
查看定义
VIEW DEFINITION 权限允许用户查看授予权限的安全对象的元数据。但是,VIEW DEFINITION 权限不会授予对安全对象本身的访问权限。例如,仅被授予对表的 VIEW DEFINITION 权限的用户可以在 sys.objects 目录视图中查看与表相关的元数据。但是,如果没有附加权限(如 SELECT 或 CONTROL),用户将无法从表中读取数据。
| 归档时间: |
|
| 查看次数: |
68593 次 |
| 最近记录: |