Com o SQL Server (2008), você pode conceder permissão de criação de tabela em um esquema?

14

Trabalhando com segurança no SQL Server 2008, estou tentando conceder permissões de CREATE TABLE a um usuário, mas apenas dentro de um esquema específico. A permissão CREATE TABLE se aplica apenas no nível do banco de dados?

Posso limitar o usuário a criar tabela apenas dentro de um esquema?

Eu tentei:

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

e

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

Mas, o usuário ainda não conseguiu criar uma tabela dentro do esquema de destino. Não é até eu executar isso, que o usuário pode criar uma tabela:

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

CONCEDER

Permissões de banco de dados GRANT

RyanW
fonte

Respostas:

12

De acordo com a ajuda do SQL Server 2008:

Requer permissão CREATE TABLE no banco de dados e permissão ALTER no esquema no qual a tabela está sendo criada.

Acabei de testar isso usando EXECUTE AS em um banco de dados de teste e consegui criar uma tabela no esquema que tinha permissão ALTER, mas não no esquema dbo (para o qual não concedi permissão ALTER). Portanto, desde que você não tenha sido muito liberal com a permissão ALTER em esquemas, esse deve ser o caminho para fazê-lo.

db2
fonte
1
Sim, eu vejo isso agora. Embora o usuário tenha a permissão "CREATE TABLE" no nível do banco de dados, ele não conseguiu criar tabelas em esquemas nos quais nenhuma outra permissão foi concedida.
RyanW 28/03
Definitivamente, parece lamentável que você tenha que conceder permissão CREATE TABLE geral apenas para ativar esse cenário.
MgSam
6

A concessão de permissão para criar tabelas para um usuário específico em um banco de dados específico não apenas requer permissões CREATE TABLE, mas também requer permissões ALTER para o esquema, por exemplo, DBO.

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

Por exemplo;

USE db_mydatabase
GRANT ALTER ON Schema :: DBO TO user_mydatabase
GRANT CREATE TABLE TO user_mydatabase
GO
Andy Davies
fonte
1

Não há nada sobre essa permissão na documentação de permissões aplicáveis ​​aos esquemas no 2008 R2: http://msdn.microsoft.com/en-us/library/ms187940.aspx

Portanto, eu concluiria: não, você não pode, criar tabela só pode ser controlado no nível do banco de dados (isso parece se aplicar a todos os protegíveis).

Richard
fonte
Obrigado, concordo, não há nada sobre esse nível. Como o @ db2 observou, a permissão "CREATE TABLE" no nível do banco de dados não é suficiente para permitir que um usuário crie uma tabela se não tiver outras permissões no esquema.
RyanW
0

Certamente você pode. Se você tiver usuário1, defina seu esquema padrão como usuário1 também. Conceda a CREATE TABLE nas permissões do banco de dados a esse usuário. É isso aí. O usuário1 pode criar apenas tabelas no esquema do usuário1.

user78128
fonte