为什么我不能创建一个所有者设置为 dbo 的新架构?

J.D*_*.D. 5 schema sql-server permissions users sql-server-2016

我创建了一个测试帐户来检查权限。它当前具有 Northwind 数据库的 db_datareader、db_datawriter 和 db_ddladmin 角色。但是当它尝试在 Northwind 上创建新模式时,如果它尝试将 dbo 授权为模式所有者,则创建失败,这是怎么回事?

创建架构失败

Version: 
SQL Server Management Studio: 15.0.18183.0 
Microsoft Analysis Services Client Tools: 15.0.1487.0 
Microsoft Data Access Components (MDAC): 10.0.18362.1 
Microsoft MSXML: 3.0 6.0 
Microsoft Internet Explorer: 9.11.18362.0 Microsoft 
.NET Framework: 4.0.30319.42000 
Operating System: 10.0.18362
Run Code Online (Sandbox Code Playgroud)

Leo*_*rda 4

db_datareader、db_datawriter 和 db_ddladmin 权限不会授予此操作所需的权限。

db_datareader: db_datareader 固定数据库角色的成员可以读取所有用户表中的所有数据。

db_datawriter: db_datawriter固定数据库角色的成员可以添加、删除或更改所有用户表中的数据。

db_ddladmin: db_ddladmin 固定数据库角色的成员可以在数据库中运行任何数据定义语言 (DDL) 命令。

正如您所看到的,这些权限将授予您创建和操作某些数据库结构的权限。但是,他们不会授予您更改其他用户或创建 schema 的权限

检查来自Microsoft的数据库级别角色和权限的 图像在此输入图像描述

请注意, db_ddladmin权限不会授予您创建 SCHEMA 的权限。为此,您需要将测试用户设置为db_accessadmin的成员资格。该角色将授予创建模式更改任何用户的权限。需要更改任何用户权限才能将 dbo 用户设置为架构所有者

USE [your_database]
GO
ALTER ROLE [db_accessadmin] ADD MEMBER [teste]
GO
Run Code Online (Sandbox Code Playgroud)

之后,您将可以在新架构中授权 DBO,如下所示:

USE [your_database]
GO
CREATE SCHEMA [test] AUTHORIZATION [dbo]
GO
Run Code Online (Sandbox Code Playgroud)

另一个将授予执行此操作的权限的角色是 db_owner,但对此具有“某种强大”的权限。这就是为什么正确的角色是 db_accessadmin。您可以在此链接中阅读有关每个权限的更多信息

请记住在正确的数据库中使用以下命令:

USE [your_database]
Run Code Online (Sandbox Code Playgroud)