使用 SQL Server (2008),您能否在架构内授予创建表权限?

Rya*_*anW 15 permissions sql-server

使用 SQL Server 2008 中的安全性,我试图授予用户 CREATE TABLE 权限,但仅限于特定架构内。CREATE TABLE 权限是否仅适用于数据库级别?

我可以限制用户仅在架构内创建表吗?

我试过了:

USE [databasename]
GRANT CONTROL ON Schema :: [schemaname] TO [username]
GO
Run Code Online (Sandbox Code Playgroud)

USE [databasename]
GRANT ALTER ON Schema :: [schemaname] TO [username]
GO
Run Code Online (Sandbox Code Playgroud)

但是,用户仍然无法在目标模式中创建表。直到我运行这个,用户才能创建一个表:

USE [databasename]
GRANT CREATE TABLE to [username]
GO
Run Code Online (Sandbox Code Playgroud)

授予

授予数据库权限

db2*_*db2 13

根据 SQL Server 2008 帮助:

需要数据库中的 CREATE TABLE 权限和正在创建表的架构的 ALTER 权限。

我刚刚通过在测试数据库中使用 EXECUTE AS 对此进行了测试,并且我能够在具有 ALTER 权限的架构中创建一个表,但在 dbo 架构中却没有(我没有授予 ALTER 权限)。因此,只要您对模式的 ALTER 权限还没有过于宽松,这应该是这样做的方法。


小智 7

向特定数据库中的特定用户授予创建表的权限不仅需要 CREATE TABLE 权限,还需要模式的 ALTER 权限,例如 DBO。

USE [databasename]
GRANT ALTER ON Schema :: [schemaname] TO [username]
GRANT CREATE TABLE TO [username]
GO
Run Code Online (Sandbox Code Playgroud)

例如;

USE db_mydatabase
GRANT ALTER ON Schema :: DBO TO user_mydatabase
GRANT CREATE TABLE TO user_mydatabase
GO
Run Code Online (Sandbox Code Playgroud)