热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

DDL_adminvsdb_owner权限

DDL_adminvs

db_ddladmin 与 db_owner

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

[ALTER ANY USER]
[BACKUP DATABASE]`, `[BACKUP LOG]`, `[CHECKPOINT]
[ALTER ANY APPLICATION ROLE]`, `[ALTER ANY ROLE]
[DROP DATABASE]



  1. db_datareader将允许SELECT访问所有表


  2. db_datarwriter将允许INSERTUPDATEDELETE访问所有表


  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 管理工作室”


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

    sql
    GRANT view definition on schema:: to






其他注意事项


当前受限的权限之一是 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





推荐阅读
  • 本文详细介绍了MySQL数据库的基础语法与核心操作,涵盖从基础概念到具体应用的多个方面。首先,文章从基础知识入手,逐步深入到创建和修改数据表的操作。接着,详细讲解了如何进行数据的插入、更新与删除。在查询部分,不仅介绍了DISTINCT和LIMIT的使用方法,还探讨了排序、过滤和通配符的应用。此外,文章还涵盖了计算字段以及多种函数的使用,包括文本处理、日期和时间处理及数值处理等。通过这些内容,读者可以全面掌握MySQL数据库的核心操作技巧。 ... [详细]
  • php更新数据库字段的函数是,php更新数据库字段的函数是 ... [详细]
  • 本文介绍了如何在 Spring 3.0.5 中使用 JdbcTemplate 插入数据并获取 MySQL 表中的自增主键。 ... [详细]
  • 基于iSCSI的SQL Server 2012群集测试(一)SQL群集安装
    一、测试需求介绍与准备公司计划服务器迁移过程计划同时上线SQLServer2012,引入SQLServer2012群集提高高可用性,需要对SQLServ ... [详细]
  • 本文详细介绍了在 CentOS 7 系统中配置 fstab 文件以实现开机自动挂载 NFS 共享目录的方法,并解决了常见的配置失败问题。 ... [详细]
  • 本文介绍如何在将数据库从服务器复制到本地时,处理因外键约束导致的数据插入失败问题。 ... [详细]
  • 本文介绍如何使用 Python 的 DOM 和 SAX 方法解析 XML 文件,并通过示例展示了如何动态创建数据库表和处理大量数据的实时插入。 ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 如何使用mysql_nd:Python连接MySQL数据库的优雅指南
    无论是进行机器学习、Web开发还是爬虫项目,数据库操作都是必不可少的一环。本文将详细介绍如何使用Python通过 `mysql_nd` 库与 MySQL 数据库进行高效连接和数据交互。内容涵盖以下几个方面: ... [详细]
  • 本文探讨了利用Java实现WebSocket实时消息推送技术的方法。与传统的轮询、长连接或短连接等方案相比,WebSocket提供了一种更为高效和低延迟的双向通信机制。通过建立持久连接,服务器能够主动向客户端推送数据,从而实现真正的实时消息传递。此外,本文还介绍了WebSocket在实际应用中的优势和应用场景,并提供了详细的实现步骤和技术细节。 ... [详细]
  • 在过去,我曾使用过自建MySQL服务器中的MyISAM和InnoDB存储引擎(也曾尝试过Memory引擎)。今年初,我开始转向阿里云的关系型数据库服务,并深入研究了其高效的压缩存储引擎TokuDB。TokuDB在数据压缩和处理大规模数据集方面表现出色,显著提升了存储效率和查询性能。通过实际应用,我发现TokuDB不仅能够有效减少存储成本,还能显著提高数据处理速度,特别适用于高并发和大数据量的场景。 ... [详细]
  • 本文详细探讨了MySQL并发参数的优化与调整方法,旨在帮助读者深入了解如何通过合理配置这些参数来提升数据库性能。文章不仅介绍了常见的并发参数及其作用,还提供了实际操作中的调整策略和最佳实践,适合希望提高数据库管理技能的技术人员阅读。 ... [详细]
  • MySQL 5.7 学习指南:SQLyog 中的主键、列属性和数据类型
    本文介绍了 MySQL 5.7 中主键(Primary Key)和自增(Auto-Increment)的概念,以及如何在 SQLyog 中设置这些属性。同时,还探讨了数据类型的分类和选择,以及列属性的设置方法。 ... [详细]
  • 如何在Java中使用DButils类
    这期内容当中小编将会给大家带来有关如何在Java中使用DButils类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。D ... [详细]
author-avatar
真实的小莹_808
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有