Como criar uma conta SQL que só pode executar certas ações?

3

Estou acostumado a trabalhar em contratos onde alguém é responsável pelo banco de dados SQL. No entanto, agora estou trabalhando em um contrato em que preciso configurar um novo SQL Server, então configuro o MS SQL Server 2012 Express.

Eu escrevi um aplicativo que se conecta ao servidor SQL e lê / atualiza várias tabelas. No meu ambiente de teste, o aplicativo está se conectando usando a conta sa, que é, naturalmente, um grande não-não.

Eu quero criar uma conta de usuário que possa selecionar / inserir / atualizar / excluir de um conjunto limitado de tabelas e não tenha outros privilégios de forma alguma.

Eu acompanharia algumas das instruções que vejo no Google, mas continuo vendo as perguntas sobre contas sem privilégio inesperadamente tendo o direito de fazer coisas que o criador da conta não pretendia. Por isso, gostaria de perguntar aos especialistas:

Como faço para criar uma conta SQL que só pode fazer uma coisa: selecionar / inserir / atualizar / excluir de um conjunto limitado de tabelas?

Editar: Com base no feedback que recebi, fiz algumas pesquisas e escrevi o seguinte script:

CREATE LOGIN ExtraUser
    WITH PASSWORD = 'foobar';

USE MyDatabase;

CREATE USER ExtraUser FOR LOGIN ExtraUser;

GRANT SELECT ON dbo.abc;
GRANT SELECT ON dbo.def;
GRANT INSERT ON dbo.def;

Isso parece fazer o que eu quero, mas gostaria de saber se posso confiar que esse usuário não pode acessar nada além das duas tabelas às quais eu dei acesso a ele.

    
por Rising Star 09.10.2013 / 20:13

1 resposta

2

Você está quase lá. Adicionar o usuário a db_datareader e db_datawriter de fato concede acesso global de leitura / gravação ao banco de dados.

Você precisará usar GRANT para conceder acesso ao login para objetos específicos.

GRANT SELECT ON dbo.Table1 TO ExtraUser
GRANT INSERT ON dbo.Table1 TO ExtraUser
GRANT UPDATE ON dbo.Table1 TO ExtraUser
GRANT DELETE ON dbo.Table1 TO ExtraUser

Você também pode combinar as permissões conforme necessário:

GRANT SELECT,INSERT,UPDATE,DELETE on dbo.Table1 to ExtraUser

Observação: você precisará executar isso para cada tabela à qual deseja permitir o acesso

Mais informações sobre GRANT podem ser encontradas aqui .

EDITAR:
Em resposta à sua edição, sim. Ele restringirá o usuário a essas permissões, desde que você também não conceda algo mais avassalador (como adicionar o login a db_datareader e db_datawriter ). Se tiver, revogue as permissões de nível superior usando REVOKE .

    
por 09.10.2013 / 21:40