AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 121208
Accepted
Reaces
Reaces
Asked: 2015-11-17 01:56:06 +0800 CST2015-11-17 01:56:06 +0800 CST 2015-11-17 01:56:06 +0800 CST

DDL_admin vs db_owner 权限

  • 772

我正在接管一个项目,该项目涉及删除和限制我们服务器场中所有数据库用户的权限。(娱乐时间)

当前受限的权限之一是 db_owner 权限。
正在逐案审查此权限,但常见的更改是将 db_owner 权限替换为以下内容:

  • db_datareader
  • db_datawriter
  • db_ddladmin
  • db_executor

我想定义两者之间的确切区别(以通知客户)。
但是,据我所知,两者之间的区别应该是:

  • db_accessadmin 权限
  • db_backupoperator 权限
  • db_securityadmin 权限

所以实际上他们会失去:
[ALTER ANY USER]
[CREATE SCHEMA]
[BACKUP DATABASE], [BACKUP LOG], [CHECKPOINT]
[ALTER ANY APPLICATION ROLE],[ALTER ANY ROLE]
[DROP DATABASE]

一旦 db_owner 被上面的四个角色替换,用户是否还会丢失任何其他内容?
这实际上在安全方面起到了很大的作用吗?

sql-server permissions
  • 2 2 个回答
  • 81754 Views

2 个回答

  • Voted
  1. Best Answer
    IT Thug Ninja
    2015-11-17T06:46:19+08:002015-11-17T06:46:19+08:00

    db_ddladmin 与 db_owner

    从我测试和阅读的内容中可以看出,在大多数情况下,您的列表看起来是准确的,除了db_ddladminDOES 允许您这样做CREATE SCHEMA。我确实确认您列出的其他安全权限确实被拒绝了。

    仅用 DDLADMIN 拒绝:

    [ALTER ANY USER]

    [BACKUP DATABASE], [BACKUP LOG],[CHECKPOINT]

    [ALTER ANY APPLICATION ROLE],[ALTER ANY ROLE]

    [DROP DATABASE]

    注意到. . .

    1. db_datareader将允许SELECT访问所有表
    2. db_datarwriter将允许INSERT、UPDATE和DELETE访问所有表
    3. db_executor将允许EXECUTE访问所有可执行对象

    此外,拥有 db_ddladmin 角色权限可能意味着。. .

    注意: 由于从 2005 年到 2014 年,您有许多不同版本的 SQL Server,因此最好让一小部分用户开始测试,看看谁会尖叫以解决任何问题等。

    • 他们以该角色拥有的对象将不归 DBO 所有,因此如果在此级别上遇到问题,您可能必须处理所有权更改问题。我不是 100% 确定这会是一个问题,但值得一提以防万一。

      来源:所有权链

    • 使用此角色(可能因 SQL Server 的版本而异),他们可能能够将当前数据库中定义的 SQL 安全原则添加到他们仍然拥有的对象中,而不是所有对象(他们不拥有的对象)或添加新服务器-level 将主体定义为 DB 级别。


    此外,没有 DBO 角色权限可能意味着。. .

    注意: 由于从 2005 年到 2014 年,您有许多不同版本的 SQL Server,因此最好让一小部分用户开始测试,看看谁会尖叫以解决任何问题等。

    • 没有 DBO 角色可能会阻止某些 SSMS 设计器 GUI 界面(SQL Server 版本不同)填充或打开而不会出现错误(例如,通过 GUI 修改表或列时),即使通过 T-SQL 工作并且权限已经到位. 在某些版本的 SQL Server 中,这可以通过允许GRANT VIEW DEFINITION这是一个问题的地方来解决,它也可以只是在某些版本的 SQL Server 上的警告。

      资源

      • 您没有作为数据库所有者或作为 db_owner 角色成员的用户登录。您将无法保存对不属于您的表的更改。

      • 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 发布

        我有一个类似的问题并设法通过执行以下授权来解决它

        GRANT view definition on schema:: <schemaname> to <username>
        

    其他注意事项

    由于您声明正在逐案审查

    当前受限的权限之一是 db_owner 权限。

    正在逐案审查此权限,但常见的更改是将 db_owner 权限替换为以下内容:

    • db_datareader
    • db_datawriter
    • db_ddladmin
    • db_executor

    您是否考虑过为每个人需要的更多“所有对象”数据库级别访问权限创建额外的自定义角色,而不是授予他们db_ddladmin角色,因为这可能会给他们提供比他们实际需要的数据库级别对象更多的权限。

    我通常只提供他们真正需要的东西,只为他们完成他们的工作,如果数据库级别对象访问数据库中的所有对象存在“通常”或“标准”需求,我会创建一个自定义数据库角色,类似于db_executor但请参阅下面的示例。这样,如果您没有在您的数据库中明确对象级别以确保他们的安全性,您就可以向人们授予他们真正需要的特定数据库中的所有数据库对象。

    ----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
    

    我还想共享一个 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
    
    • 24
  2. Reaces
    2015-11-27T06:12:26+08:002015-11-27T06:12:26+08:00

    使用 SQL 脚本列出所有权限,我为每个案例创建了用户。

    EXECUTE AS USER = 'test_user'
    SELECT 
        permission_name 
    FROM fn_my_permissions(null, 'DATABASE')
    ORDER BY subentity_name, permission_name
    REVERT;
    

    然后我比较了结果,并得出以下列表,主要来自msdn的文档(任何未特别引用的引用均来自 msdn 链接)。
    以下是我用来告知将失去 dbo 权限的人的一些文档,他们究竟失去了什么。

    改变

    赋予更改特定安全对象的属性(所有权除外)的能力。当授予范围时,ALTER 还授予更改、创建或删除该范围内包含的任何安全对象的能力。例如,对模式的 ALTER 权限包括从模式创建、更改和删除对象的能力。

    更改任何应用程序角色
    更改任何数据库审核
    更改任何角色
    更改任何用户

    赋予创建、更改或删除数据库安全的单个实例的能力。例如,ALTER ANY SCHEMA 赋予在数据库中创建、更改或删除任何模式的能力。

    应用程序角色是使应用程序能够以自己的类似用户的权限运行的数据库主体。

    审核SQL Server 实例或 SQL Server 数据库涉及跟踪和记录系统上发生的事件。数据库级审计规范对象属于审计。您可以为每个 SQL Server 数据库的每个审计创建一个数据库审计规范。

    数据库角色用于轻松管理数据库中的权限,SQL Server 提供了几个角色,这些角色是对其他主体进行分组的安全主体。它们就像 Microsoft Windows 操作系统中的组。数据库级角色在其权限范围内是数据库范围的。

    AUTHENTICATE
    在 msdn 中找到。

    AUTHENTICATE & AUTHENTICATE SERVER 权限仅在跨数据库和服务器访问(分别)场景中使用 EXECUTE AS 时使用。

    备份数据库
    备份日志

    连接复制

    用于数据库复制权限。

    控制

    授予受让人类似所有权的能力。被授权者实际上拥有对安全对象的所有已定义权限。已被授予 CONTROL 的主体也可以授予对安全对象的权限。

    创建角色

    授予受让人创建安全数据库的能力。

    展示计划

    Showplan 权限在与 Transact-SQL 批处理一起使用时用于各种 Showplan SET 语句选项。

    订阅查询通知

    有关查询通知的文档。

    建立在 Service Broker 基础架构之上,查询通知允许在数据发生更改时通知应用程序。此功能对于从数据库提供信息缓存的应用程序(例如 Web 应用程序)特别有用,并且需要在源数据更改时得到通知。

    取得所有权

    使被授予者能够获得授予它的安全对象的所有权。

    查看数据库状态

    用于查看动态管理视图和函数 (Transact-SQL)。

    查看定义

    有关视图定义权限的文档。

    VIEW DEFINITION 权限允许用户查看授予权限的安全对象的元数据。但是,VIEW DEFINITION 权限并不授予对安全对象本身的访问权限。例如,仅被授予对表的 VIEW DEFINITION 权限的用户可以在 sys.objects 目录视图中查看与表相关的元数据。但是,如果没有 SELECT 或 CONTROL 等附加权限,用户将无法从表中读取数据。

    • 9

相关问题

  • SQL Server - 使用聚集索引时如何存储数据页

  • 我需要为每种类型的查询使用单独的索引,还是一个多列索引可以工作?

  • 什么时候应该使用唯一约束而不是唯一索引?

  • 死锁的主要原因是什么,可以预防吗?

  • 如何确定是否需要或需要索引

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve