Eu tenho um usuário que tem permissão para criar sinônimo no meu banco de dados sql server 2016. Esse usuário também tem permissão de leitor de dados. Quando o usuário tentou criar sinônimo conforme mostrado abaixo.
USE [DEMODB]
GO
CREATE SYNONYM [dbo].[MYSYN] FOR [SERVER01].[DEMODB].[dbo].[CHILD]
GO
O usuário recebe a mensagem de erro abaixo.
The specified schema name "dbo" either does not exist or you do not have permission to use it.
Verifiquei as configurações de login/usuário. E o login pertence à função de servidor público e o usuário é mapeado para o banco de dados com o esquema padrão como [dbo]
E também a permissão de criação de sinônimos é concedida para esse banco de dados para esse usuário, conforme mencionado anteriormente.
Como posso consertar isso.
Um usuário requer não apenas
CREATE SYNONYM
permissões de instrução, mas tambémALTER
permissões no esquema para criar um sinônimo.ALTER
permissão em um esquema, especialmentedbo
, deve ser concedida com cuidado para seguir o princípio de segurança de privilégio mínimo. Seria melhor (e mais fácil) se o usuário criasse o sinônimo em seu próprio esquema ou em um esquema com um proprietário diferentedbo
para que o usuário fosse colocado em sandbox nesse esquema paraALTER
fins.Se o usuário com privilégios mínimos precisar criar o sinônimo no
dbo
esquema, considere encapsular oCREATE SYNONYM
DDL em um procedimento armazenado e use a assinatura do módulo para elevar as permissões. Dessa forma, um usuário com permissões de execução no proc pode criar sinônimos nodbo
esquema, mas está limitado à funcionalidade executada pelo procedimento armazenado. Abaixo está um exemplo desta técnica.Conforme observado na documentação da Microsoft para
CREATE SCHEMA
:"Para criar um sinônimo em um determinado esquema, um usuário deve ter a permissão CREATE SYNONYM e possuir o esquema ou ter a permissão ALTER SCHEMA ."
Como você deve corrigi-lo é para qualquer um
1) Conecte-se com um usuário com privilégios mais altos para criar o sinônimo.
ou
2) Forneça um esquema de propriedade do usuário e faça com que ele crie o sinônimo lá.
Como você não deve corrigir isso é conceder a um usuário que "tem permissão de leitor de dados" ALTER no schema::dbo. É uma regra fundamental da segurança do SQL Server que apenas um usuário privilegiado pode criar objetos nos esquemas de outros usuários, pois isso equivale a permitir que eles representem o proprietário do esquema.