在SQL Server 2008中使用安全性,我试图授予用户CREATE TABLE权限,但只能在特定的模式中使用。 CREATE TABLE权限是否仅适用于数据库级别?
我可以限制用户只在模式中创build表吗?
我试过了:
USE [databasename] GRANT CONTROL ON Schema :: [schemaname] TO [username] GO
和
USE [databasename] GRANT ALTER ON Schema :: [schemaname] TO [username] GO
但是,用户仍然无法在目标模式中创build表。 直到我运行这个,用户可以创build一个表:
USE [databasename] GRANT CREATE TABLE to [username] GO
GRANT
GRANT数据库权限
根据SQL Server 2008的帮助:
在数据库中需要CREATE TABLE权限,在创build表的模式中需要ALTER权限。
我只是在testing数据库中使用EXECUTE AS来testing这个,我能够在具有ALTER权限的模式中创build一个表,但是不能在dbo模式(为此我没有授予ALTER权限)中创build一个表。 所以只要你对模式上的ALTER权限没有太过自由,这应该是这样做的方式。
授予在特定数据库中为特定用户创build表的权限不仅需要CREATE TABLE权限,还需要对模式(例如DBO)具有ALTER权限。
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
在适用于2008 R2的模式的权限文档中没有关于这种权限的任何内容: http : //msdn.microsoft.com/zh-cn/library/ms187940.aspx
所以我会得出结论:不行,创build表只能在数据库级别进行控制(这似乎适用于所有的安全性)。
你当然可以。 如果你有user1,那么定义它的默认模式为user1。 授予该用户数据库权限的CREATE TABLE。 而已。 user1只能在user1模式中创build表。