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


14

使用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

格兰特

GRANT数据库权限

Answers:


12

根据SQL Server 2008帮助:

在数据库中需要CREATE TABLE权限,在创建表的模式上需要ALTER权限。

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


1
是的,我现在看到了。即使用户具有数据库级别的“ CREATE TABLE”权限,他仍无法在未授予其他权限的架构中创建表。
RyanW 2011年

绝对不幸的是,您必须仅授予CREATE TABLE权限才能启用此方案。
MgSam 2012年

6

向特定数据库中的特定用户授予创建表的权限不仅需要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

1

适用于2008 R2中的架构的权限文档中没有关于此类权限的信息:http : //msdn.microsoft.com/zh-cn/library/ms187940.aspx

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


谢谢,我同意,这个水平没有任何问题。正如@ db2指出的那样,如果数据库级别的“ CREATE TABLE”权限对模式没有其他权限,则不足以允许用户创建表。
RyanW

0

你当然可以。如果您有user1,则还将其默认架构也定义为user1。向该用户授予数据库中的CREATE TABLE权限。而已。user1只能在user1架构内创建表。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.