我正在接管一个项目,该项目涉及删除和限制我们服务器场中所有数据库用户的权限。(娱乐时间)
当前受限的权限之一是 db_owner 权限。 正在逐案审查此权限,但常见的更改是将 db_owner 权限替换为以下内容:
我想定义两者之间的确切区别(以通知客户)。 但是,据我所知,两者之间的区别应该是:
所以实际上他们会失去: [ALTER ANY USER] [CREATE SCHEMA] [BACKUP DATABASE], [BACKUP LOG], [CHECKPOINT] [ALTER ANY APPLICATION ROLE],[ALTER ANY ROLE] [DROP DATABASE]
[ALTER ANY USER]
[CREATE SCHEMA]
[BACKUP DATABASE]
[BACKUP LOG]
[CHECKPOINT]
[ALTER ANY APPLICATION ROLE]
[ALTER ANY ROLE]
[DROP DATABASE]
一旦 db_owner 被上面的四个角色替换,用户是否还会丢失任何其他内容? 这实际上在安全方面起到了很大的作用吗?
从我测试和阅读的内容中可以看出,在大多数情况下,您的列表看起来是准确的,除了db_ddladminDOES 允许您这样做CREATE SCHEMA。我确实确认您列出的其他安全权限确实被拒绝了。
db_ddladmin
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,因此最好让一小部分用户开始测试,看看谁会尖叫以解决任何问题等。
来源:所有权链
GRANT VIEW DEFINITION
资源
您没有作为数据库所有者或作为 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 发布 我有一个类似的问题并设法通过执行以下授权来解决它 sql GRANT view definition on schema:: <schemaname> to <username>
“我们尽量避免在他们的 QA 数据库中为用户/开发人员提供 dbo。这样做的问题之一是他们仍然需要能够创建和修改数据库对象,例如用户表。许多开发人员是新手MS SQL,因此倾向于坚持使用 GUI (SSMS) 进行此类工作。当我们授予他们 db_ddladmin (而不是 dbo) 并且他们不再能够通过表设计器 GUI 修改表或列时,就会出现问题。相反,他们必须花额外的时间来学习 TSQL 命令及其语法(他们可能再也不需要这些),或者让 DBA 团队参与,这会占用我们其他活动的时间。
我不知道这是一个错误还是功能请求,但我认为这是一个错误,因为用户有足够的权限通过 TSQL 更改表,但 GUI 给他们的消息说明:
“您没有以数据库所有者或系统管理员的身份登录。您可能无法保存对不属于您的表的更改。” AND “表[schema].[table]设置为只读,用户对该表没有足够的权限。 “
[schema].[table]
跟踪似乎指向检查是一个 is_member(‘db_owner’) 这将排除 db_ddladmin 的成员,即使他们实际上有权修改该对象。Microsoft SQL Server 管理工作室”
由代理 DBA 于 2010 年 1 月 25 日上午 7:06 发布
我有一个类似的问题并设法通过执行以下授权来解决它
sql GRANT view definition on schema:: <schemaname> to <username>
由于您声明正在逐案审查
当前受限的权限之一是 db_owner 权限。 正在逐案审查此权限,但常见的更改是将 db_owner 权限替换为以下内容: db_datareader db_datawriter db_ddladmin db_executor
当前受限的权限之一是 db_owner 权限。
正在逐案审查此权限,但常见的更改是将 db_owner 权限替换为以下内容:
您是否考虑过为每个人需要的更多“所有对象”数据库级别访问权限创建额外的自定义角色,而不是授予他们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
例如,如果您知道他们肯定会创建存储过程和函数,则可以排除DENY CREATE FUNCTION, DENY CREATE PROCEDURE, DENY ALTER ANY SCHEMA.
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