使用 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 架构中创建表。