Sobre os usuários do SQL Server

Esta página descreve como o Cloud SQL funciona com usuários e papéis do SQL Server. Os papéis do SQL Server permitem controlar o acesso e os recursos dos usuários que acessam uma instância do SQL Server.

Para informações sobre a criação e o gerenciamento de usuários do Cloud SQL, consulte Criar e gerenciar usuários.

Papéis e usuários do SQL Server

Os papéis do SQL Server podem ser um único papel ou podem funcionar como um grupo de papéis.

Um usuário é um papel com a capacidade de fazer login (o papel tem a permissão LOGIN). Todos os papéis criados pelo Cloud SQL têm a permissão LOGIN. Portanto, o Cloud SQL usa os termos "papel" e "usuário" de forma intercambiável. No entanto, se você criar um papel com o cliente, ele não terá necessariamente a permissão LOGIN.

Todos os usuários do SQL Server precisam ter uma senha. Não é possível fazer login com um usuário que não tenha uma senha.

Superusuários e procedimentos armazenados no sistema

O Cloud SQL para SQL Server é um serviço gerenciado, por isso ele restringe o acesso a determinados procedimentos e tabelas armazenados no sistema que exigem que exigem privilégios avançados. No Cloud SQL, não é possível criar ou ter acesso a usuários com permissões de superusuário.

Usuários padrão do SQL Server

Quando você cria uma nova instância do Cloud SQL para SQL Server, o usuário sqlserver padrão já é criado para você, embora seja necessário definir a senha.

O usuário sqlserver faz parte do papel CustomerDbRootRole e as permissões (privilégios) incluem o seguinte:

  • ALTER ANY CONNECTION
  • ALTER ANY LOGIN
  • ALTER ANY SERVER ROLE
  • ALTER SERVER STATE
  • ALTER TRACE
  • CONNECT SQL
  • CREATE ANY DATABASE
  • CREATE SERVER ROLE
  • VIEW ANY DATABASE
  • VIEW ANY DEFINITION
  • VIEW SERVER STATE

Também é possível adicionar cloudsql enable linked servers à instância para usá-la com servidores vinculados. Essa sinalização concede a seguinte permissão ao seu servidor:

  • ALTER ANY LINKED SERVER

Como conceder as permissões de servidor

Ao conceder privilégios usando qualquer comando GRANT, você precisa passar CustomerDbRootRole como, por exemplo, o valor de grantor_principal.

O exemplo GRANT ALTER ANY LOGIN a seguir é válido:

GRANT ALTER ANY LOGIN TO [Account] AS CustomerDbRootRole

O exemplo GRANT ALTER ANY LOGIN a seguir é inválido:

GRANT ALTER ANY LOGIN TO [Account]

Outros usuários do SQL Server

Você pode criar outros usuários do SQL Server ou papéis. Todos os usuários criados com o Cloud SQL recebem as mesmas permissões de banco de dados que o login sqlserver. No entanto, se você usar um processo diferente para criar um usuário (em vez de criá-lo usando o Cloud SQL), o usuário não terá as mesmas permissões das contas de administrador do cliente ou do usuário sqlserver. Por exemplo, se você usar o processo de criar login e adicionar o login ao papel de servidor CustomerDbRootRole, o usuário não terá as mesmas permissões das contas de administrador do cliente ou do usuário sqlserver. Portanto, você pode usar o Cloud SQL para criar um usuário se quiser que ele tenha as mesmas permissões de banco de dados que o login sqlserver. Para validar a diferença nas permissões entre duas contas, é possível usar a seguinte função: sys.fn_my_permissions.

Importações de banco de dados: permissões de proprietário

Quando você importa um banco de dados, o tratamento do proprietário varia da seguinte maneira, com base no tipo do proprietário:

  • Para um login existente que não seja sa: o Cloud SQL mantém esse proprietário e cria um usuário chamado sqlserver que é mapeado para o login sqlserver. O Cloud SQL concede as permissões CONTROL e ALTER ANY USER ao usuário sqlserver.
  • Para logins desconhecidos ou que foram criados pelo sistema: o Cloud SQL transfere a propriedade do banco de dados para o login sqlserver.

Alterar permissões para usuários

O comando ALTER ROLE está disponível para alterar as permissões de usuários. Se você criar um novo usuário com um cliente, poderá associá-lo a um papel diferente ou conceder permissões diferentes.

Solução de problemas

Erro ao acessar o banco de dados

Ao tentar acessar um banco de dados criado por você, como um usuário criado, você recebe o erro:

The server principal USERNAME is not able to access the
database DATABASE_NAME under the current security context.

O problema pode ser

O usuário não é membro do banco de dados.

O que você pode tentar

Conecte-se ao banco de dados como o usuário sqlserver e adicione o novo usuário. Em seguida, conceda ao novo usuário o papel db_owner para o banco de dados. Por exemplo:

EXEC sp_adduser 'user';
EXEC sp_addrolemember 'db_owner', 'user'

A seguir