Práticas recomendadas de segurança com bancos de dados independentesSecurity Best Practices with Contained Databases

APLICA-SE A: simSQL Server nãoBanco de Dados SQL do Azure nãoAzure Synapse Analytics (SQL DW) nãoParallel Data Warehouse APPLIES TO: yesSQL Server noAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Bancos de dados independentes têm algumas ameaças exclusivas que devem ser entendidas e mitigadas pelos administradores do Mecanismo de Banco de Dados do SQL ServerSQL Server Database Engine .Contained databases have some unique threats that should be understood and mitigated by Mecanismo de Banco de Dados do SQL ServerSQL Server Database Engine administrators. A maioria das ameaças está relacionada ao processo de autenticação USER WITH PASSWORD que move o limite de autenticação do nível do Mecanismo de Banco de DadosDatabase Engine para o nível do banco de dados.Most of the threats are related to the USER WITH PASSWORD authentication process, which moves the authentication boundary from the Mecanismo de Banco de DadosDatabase Engine level to the database level.

Usuários em um banco de dados independente que têm a permissão ALTER ANY USER, como membros das funções de banco de dados fixas db_owner e db_accessadmin, podem permitir acesso ao banco de dados sem conhecimento ou permissão ou o administrador do SQL ServerSQL Server.Users in a contained database that have the ALTER ANY USER permission, such as members of the db_owner and db_accessadmin fixed database roles, can grant access to the database without the knowledge or permission or the SQL ServerSQL Server administrator. A concessão de acesso a um banco de dados independente a usuários aumenta a área da superfície de ataque potencial contra toda a instância do SQL ServerSQL Server .Granting users access to a contained database increases the potential attack surface area against the whole SQL ServerSQL Server instance. Os administradores devem entender essa delegação de controle de acesso e ter muito cuidado ao conceder permissão ALTER ANY USER aos usuários no banco de dados independente.Administrators should understand this delegation of access control, and be very careful about granting users in the contained database the ALTER ANY USER permission. Todos os proprietários de banco de dados têm a permissão ALTER ANY USER .All database owners have the ALTER ANY USER permission. SQL ServerSQL Server auditar os usuários periodicamente em um banco de dados independente.administrators should periodically audit the users in a contained database.

Acessando outros bancos de dados que usam a conta ConvidadoAccessing Other Databases Using the guest Account

Os proprietários e os usuários de banco de dados com a permissão ALTER ANY USER podem criar usuários de banco de dados independente.Database owners and database users with the ALTER ANY USER permission can create contained database users. Após conectar-se a um banco de dados independente em uma instância do SQL ServerSQL Server, um usuário de banco de dados independente poderá acessar outros bancos de dados no Mecanismo de Banco de DadosDatabase Engine, caso os outros bancos de dados tenham habilitado a conta de convidado .After connecting to a contained database on an instance of SQL ServerSQL Server, a contained database user can access other databases on the Mecanismo de Banco de DadosDatabase Engine, if the other databases have enabled the guest account.

Criando um usuário duplicado em outro banco de dadosCreating a Duplicate User in Another Database

Alguns aplicativos podem exigir que um usuário tenha acesso a mais de um banco de dados.Some applications might require that a user to have access to more than one database. Isso pode ser feito por meio da criação de usuários de banco de dados independente idênticos em cada banco de dados.This can be done by creating identical contained database users in each database. Use a opção de SID ao criar o segundo usuário com a senha.Use the SID option when creating the second user with password. O exemplo a seguir cria dois usuários idênticos em dois bancos de dados.The following example creates two identical users in two databases.

USE DB1;  
GO  
CREATE USER Carlo WITH PASSWORD = '<strong password>';   
-- Return the SID of the user  
SELECT SID FROM sys.database_principals WHERE name = 'Carlo';  
  
-- Change to the second database  
USE DB2;  
GO  
CREATE USER Carlo WITH PASSWORD = '<same password>', SID = <SID from DB1>;  
GO  

Para executar uma consulta de bancos de dados cruzado, você deve definir a opção TRUSTWORTHY no banco de dados de chamada.To execute a cross-database query, you must set the TRUSTWORTHY option on the calling database. Por exemplo se o usuário (Carlo) definido acima estiver em DB1, para executar SELECT * FROM db2.dbo.Table1; , a configuração TRUSTWORTHY deve estar ativada para o banco de dados DB1.For example if the user (Carlo) defined above is in DB1, to execute SELECT * FROM db2.dbo.Table1; then the TRUSTWORTHY setting must be on for database DB1. Execute o código a seguir para ativar a configuração TRUSTWORTHY .Execute the following code to set the TRUSTWORTHY setting on.

ALTER DATABASE DB1 SET TRUSTWORTHY ON;  

Criando um usuário que duplica um logonCreating a User that Duplicates a Login

Se um usuário de banco de dados independente com senha for criado com o mesmo nome de um logon do SQL ServerSQL Server e se o logon do SQL ServerSQL Server se conectar especificando o banco de dados independente como catálogo inicial, o logon do SQL ServerSQL Server não poderá se conectar.If a contained database user with password is created, using the same name as a SQL ServerSQL Server login, and if the SQL ServerSQL Server login connects specifying the contained database as the initial catalog, then the SQL ServerSQL Server login will be unable to connect. A conexão será avaliada como a entidade do usuário com senha no banco de dados independente em vez de como um usuário baseado no logon do SQL ServerSQL Server .The connection will be evaluated as the contained database user with password principal on the contained database instead of as a user based on the SQL ServerSQL Server login. Isso pode provocar uma negação intencional ou acidental do serviço para o logon do SQL ServerSQL Server .This could cause an intentional or accidental denial of service for the SQL ServerSQL Server login.

  • Como uma prática recomendada, membros da função de servidor fixa sysadmin devem sempre considerar conectar-se com o uso da opção de catálogo inicial.As a best practice, members of the sysadmin fixed server role should consider always connecting without using the initial catalog option. Isso conecta o logon ao banco de dados mestre e evita qualquer tentativa de um proprietário de banco de dados usar indevidamente a tentativa de logon.This connects the login to the master database and avoids any attempts by a database owner to misuse the login attempt. Em seguida, o administrador pode mudar para o banco de dados independente usando a instrução USE <bancodedados> .Then the administrator can change to the contained database by using the USE<database> statement. Também é possível definir o banco de dados padrão do logon para o banco de dados independente, o que conclui o logon no mestree, em seguida, transfere o logon para o banco de dados independente.You can also set the default database of the login to the contained database, which completes the login to master, and then transfers the login to the contained database.

  • Como uma prática recomendada, não crie usuários de banco de dados independente com senhas que tenham o mesmo nome que logons do SQL ServerSQL Server .As a best practice, do not create contained database users with passwords who have the same name as SQL ServerSQL Server logins.

  • Se o logon duplicado existir, conecte-se ao banco de dados mestre sem especificar um catálogo inicial e execute o comando USE para mudar para o banco de dados independente.If the duplicate login exists, connect to the master database without specifying an initial catalog, and then execute the USE command to change to the contained database.

  • Quando os bancos de dados independentes estiverem presentes, os usuários de bancos de dados dependentes devem se conectar ao Mecanismo de Banco de DadosDatabase Engine sem usar um catálogo inicial ou especificando o nome de um banco de dados dependente como catálogo inicial.When contained databases are present, users of databases that are not contained databases should connect to the Mecanismo de Banco de DadosDatabase Engine without using an initial catalog or by specifying the database name of a non-contained database as the initial catalog. Isso evita a conexão ao banco de dados independente que está sob controle menos direto pelos administradores do Mecanismo de Banco de DadosDatabase Engine .This avoids connecting to the contained database which is under less direct control by the Mecanismo de Banco de DadosDatabase Engine administrators.

Aumentando o acesso por meio da alteração do status de contenção de um banco de dadosIncreasing Access by Changing the Containment Status of a Database

Logons que têm a permissão ALTER ANY DATABASE , como membros da função de servidor fixa dbcreator , e usuários em um banco de dados dependente que têm a permissão CONTROL DATABASE , como membros da função de banco de dados fixa db_owner , podem alterar a configuração de contenção de um banco de dados.Logins that have the ALTER ANY DATABASE permission, such as members of the dbcreator fixed server role, and users in a non-contained database that have the CONTROL DATABASE permission, such as members of the db_owner fixed database role, can change the containment setting of a database. Se a configuração de contenção de um banco de dados for alterada de NONE para PARTIAL ou FULL, o acesso de usuários poderá ser concedido por meio da criação de usuários de banco de dados independente com senhas.If the containment setting of a database is changed from NONE to either PARTIAL or FULL, then user access can be granted by creating contained database users with passwords. Isso pode fornecer acesso sem o conhecimento ou consentimento dos administradores do SQL ServerSQL Server .This could provide access without the knowledge or consent of the SQL ServerSQL Server administrators. Para impedir a contenção de qualquer banco de dados, defina a opção Mecanismo de Banco de DadosDatabase Enginecontained database authenticationde do como 0.To prevent any databases from being contained, set the Mecanismo de Banco de DadosDatabase Enginecontained database authentication option to 0. Para impedir conexões por usuários de banco de dados independente com senhas em bancos de dados independentes selecionados, use gatilhos de logon para cancelar tentativas de logon por usuários de banco de dados independente com senhas.To prevent connections by contained database users with passwords on selected contained databases, use login triggers to cancel login attempts by contained database users with passwords.

Anexando um banco de dados independenteAttaching a Contained Database

Por meio da anexação de um banco de dados independente, um administrador pode dar acesso não desejado de usuários à instância do Mecanismo de Banco de DadosDatabase Engine.By attaching a contained database, an administrator could give unwanted users access to the instance of the Mecanismo de Banco de DadosDatabase Engine. Um administrador preocupado com esse risco pode colocar o banco de dados online em modo RESTRICTED_USER , o que impede a autenticação para usuários de bancos de dados independentes com senha.An administrator concerned about this risk can bring the database online in RESTRICTED_USER mode, which prevents authentication for contained database users with passwords. Apenas entidades autorizadas por meio de logon poderão acessar o Mecanismo de Banco de DadosDatabase Engine.Only principals authorized through logins will be able to access the Mecanismo de Banco de DadosDatabase Engine.

Os usuários são criados com o uso dos requisitos de senha em vigor no momento em que são criados, e as senhas não são verificadas novamente quando um banco de dados é anexado.Users are created using the password requirements in effect at the time that they are created and passwords are not rechecked when a database is attached. Com a anexação de um banco de dados independente que permite senhas fracas a um sistema com uma política de senha mais rígida, um administrador pode permitir senhas que não atendam à política de senha atual no Mecanismo de Banco de DadosDatabase Enginede anexação.By attaching a contained database which allowed weak passwords to a system with a stricter password policy, an administrator could permit passwords that do not meet the current password policy on the attaching Mecanismo de Banco de DadosDatabase Engine. Os administradores podem evitar a contenção de senhas fracas com a exigência de que todas as senhas sejam redefinidas para o banco de dados anexado.Administrators can avoid retaining the weak passwords by requiring that all passwords be reset for the attached database.

Políticas de senhaPassword Policies

É possível exigir senhas fortes em um banco de dados, mas não é possível protegê-las com políticas de senha robusta.Passwords in a database can be required to be strong passwords, but cannot be protected by robust password policies. Use a Autenticação do Windows sempre que possível para tirar proveito das políticas de senha mais extensivas disponíveis no Windows.Use Windows Authentication whenever possible to take advantage of the more extensive password policies available from Windows.

Autenticação KerberosKerberos Authentication

Usuários de bancos de dados independentes com senhas não podem usar a Autenticação Kerberos.Contained database users with passwords cannot use Kerberos Authentication. Quando possível, use a Autenticação do Windows para tirar proveito dos recursos do Windows, como o Kerberos.When possible, use Windows Authentication to take advantage of Windows features such as Kerberos.

Ataque de dicionário offlineOffline Dictionary Attack

Os hashes de senha de usuários de banco de dados independente com senhas são armazenados no banco de dados independente.The password hashes for contained database users with passwords are stored in the contained database. Qualquer usuário com acesso aos arquivos de banco de dados pode executar um ataque de dicionário contra os usuários de banco de dados independente com senhas em um sistema não auditado.Anyone with access to the database files could perform a dictionary attack against the contained database users with passwords on an unaudited system. Para mitigar essa ameaça, restrinja o acesso aos arquivos de banco de dados, ou apenas permita conexões ao bancos de dados contido por meio da Autenticação do Windows.To mitigate this threat, restrict access to the database files, or only permit connections to contained databases by using Windows Authentication.

Escape de um banco de dados independenteEscaping a Contained Database

Se um banco de dados for parcialmente contido, os administradores do SQL ServerSQL Server deverão auditar os recursos dos usuários e módulos periodicamente em bancos de dados independentes.If a database is partially contained, SQL ServerSQL Server administrators should periodically audit the capabilities of the users and modules in contained databases.

Negação de serviço por meio de AUTO_CLOSEDenial of Service Through AUTO_CLOSE

Não configure bancos de dados independentes como fechamento automático.Do not configure contained databases to auto close. Se fechado, a abertura do banco de dados para autenticar um usuário consumirá recursos adicionais e poderá contribuir para um ataque de negação de serviço.If closed, opening the database to authenticate a user consumes additional resources and could contribute to a denial of service attack.

Consulte TambémSee Also

Bancos de dados independentes Contained Databases
Migrar para um banco de dados parcialmente independenteMigrate to a Partially Contained Database