使用 SQL Server(2008),您可以在架构内授予创建表的权限吗?

使用 SQL Server(2008),您可以在架构内授予创建表的权限吗?

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

我可以限制用户仅在某个模式内创建表吗?

我试过了:

USE [databasename]
GRANT CONTROL ON Schema :: [schemaname] TO [username]
GO

USE [databasename]
GRANT ALTER ON Schema :: [schemaname] TO [username]
GO

但是,用户仍然无法在目标架构中创建表。直到我运行此命令,用户才可以创建表:

USE [databasename]
GRANT CREATE TABLE to [username]
GO

授予

授予数据库权限

答案1

根据SQL Server 2008帮助:

需要在数据库中拥有 CREATE TABLE 权限,并在创建表的架构上拥有 ALTER 权限。

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

答案2

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

USE [databasename]
GRANT ALTER ON Schema :: [schemaname] TO [username]
GRANT CREATE TABLE TO [username]
GO

例如;

USE db_mydatabase
GRANT ALTER ON Schema :: DBO TO user_mydatabase
GRANT CREATE TABLE TO user_mydatabase
GO

答案3

2008 R2 中适用于架构的权限文档中没有关于此类权限的任何内容:http://msdn.microsoft.com/en-us/library/ms187940.aspx

因此我得出结论:不,你不能,创建表只能在数据库级别进行控制(这似乎适用于所有可安全保护的对象)。

答案4

当然可以。如果您有 user1,则也将其默认架构定义为 user1。向此用户授予数据库中 CREATE TABLE 的权限。就是这样。user1 只能在 user1 架构中创建表。

相关内容