热门标签 | 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





推荐阅读
  • SQL Server 2008 到底需要使用哪些端口?
    SQLServer2008到底需要使用哪些端口?-下面就来介绍下SQLServer2008中使用的端口有哪些:  首先,最常用最常见的就是1433端口。这个是数据库引擎的端口,如果 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • 前一天学习了视图按键事件的监听。首先新建了一个自定义的视图,在自定义视图中,重新编了其构造函数和onDraw()方法。之后将该视图用于应用程序,最后添加该视图的按键监听器,在监听器中对KeyEvent ... [详细]
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社区 版权所有