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