Partilhar via


Gerenciando usuários, funções e logons

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada SQL do AzureBanco de Dados SQL do Azure Synapse Analyticsno Microsoft Fabric

No SMO, os logins são representados pelo objeto Login. Quando o logon existe no SQL Server, ele pode ser adicionado a uma função de servidor. A função de servidor é representada pelo objeto ServerRole. A função de banco de dados é representada pelo objeto DatabaseRole e a função de aplicativo é representada pelo objeto ApplicationRole.

Os privilégios associados ao nível do servidor são listados como propriedades do objeto ServerPermission. Os privilégios de nível de servidor podem ser concedidos, negados ou revogados de contas de logon individuais.

Cada objeto Database tem um objeto UserCollection que especifica todos os usuários no banco de dados. Cada usuário está associado a um logon. Um logon pode ser associado a usuários em mais de um banco de dados. O método EnumDatabaseMappings do objeto Login pode ser usado para listar todos os usuários em cada banco de dados associado ao logon. Como alternativa, a propriedade Login do objeto User especifica o logon associado ao usuário.

Os bancos de dados do SQL Server também têm funções que especificam um conjunto de privilégios de nível de banco de dados que permitem que um usuário execute tarefas específicas. Ao contrário das funções de servidor, as funções de banco de dados não são fixas. Eles podem ser criados, modificados e removidos. Privilégios e usuários podem ser atribuídos a uma função de banco de dados para administração em massa.

Exemplo

Para os exemplos de código a seguir, você precisa selecionar o ambiente de programação, o modelo de programação e a linguagem de programação para criar seu aplicativo. Para obter mais informações, consulte Criar um projeto SMO do Visual C# no Visual Studio .NET.

Enumerando logons e usuários associados no Visual C#

Cada usuário em um banco de dados é associado a um logon. O logon pode ser associado a usuários em mais de um banco de dados. O exemplo de código mostra como chamar o método EnumDatabaseMappings do objeto Login para listar todos os usuários de banco de dados associados ao logon. O exemplo cria um logon e um usuário no banco de dados AdventureWorks2022 para garantir que haja informações de mapeamento para enumerar.

{
Server srv = new Server();
//Iterate through each database and display.

foreach ( Database db in srv.Databases) {
   Console.WriteLine("========");
   Console.WriteLine("Login Mappings for the database: " + db.Name);
   Console.WriteLine(" ");
   //Run the EnumLoginMappings method and return details of database user-login mappings to a DataTable object variable.
   DataTable d;
   d = db.EnumLoginMappings();
   //Display the mapping information.
   foreach (DataRow r in d.Rows) {
      foreach (DataColumn c in r.Table.Columns) {
         Console.WriteLine(c.ColumnName + " = " + r[c]);
      }
      Console.WriteLine(" ");
   }
}
}

Enumerando logons e usuários associados no PowerShell

Cada usuário em um banco de dados é associado a um logon. O logon pode ser associado a usuários em mais de um banco de dados. O exemplo de código mostra como chamar o método EnumDatabaseMappings do objeto Login para listar todos os usuários de banco de dados associados ao logon. O exemplo cria um logon e um usuário no banco de dados AdventureWorks2022 para garantir que haja informações de mapeamento para enumerar.

# Set the path context to the local, default instance of SQL Server.
CD \sql\localhost\Default\Databases

#Iterate through all databases
foreach ($db in Get-ChildItem)
{
  "====="
  "Login Mappings for the database: "+ $db.Name

  #get the datatable containing the mapping from the smo database object
  $dt = $db.EnumLoginMappings()

  #display the results
  foreach($row in $dt.Rows)
  {
     foreach($col in $row.Table.Columns)
     {
       $col.ColumnName + "=" + $row[$col]
     }
   }
 }

Gerenciando funções e usuários

Este exemplo demonstra como gerenciar funções e usuários. Para executar este exemplo, você precisará fazer referência aos seguintes assemblies:

  • Microsoft.SqlServer.Smo.dll

  • Microsoft.SqlServer.Management.Sdk.Sfc.dll

  • Microsoft.SqlServer.ConnectionInfo.dll

  • Microsoft.SqlServer.SqlEnum.dll

using Microsoft.SqlServer.Management.Smo;
using System;

public class A {
   public static void Main() {
      Server svr = new Server();
      Database db = new Database(svr, "TESTDB");
      db.Create();

      // Creating Logins
      Login login = new Login(svr, "Login1");
      login.LoginType = LoginType.SqlLogin;
      login.Create("password@1");

      Login login2 = new Login(svr, "Login2");
      login2.LoginType = LoginType.SqlLogin;
      login2.Create("password@1");

      // Creating Users in the database for the logins created
      User user1 = new User(db, "User1");
      user1.Login = "Login1";
      user1.Create();

      User user2 = new User(db, "User2");
      user2.Login = "Login2";
      user2.Create();

      // Creating database permission Sets
      DatabasePermissionSet dbPermSet = new DatabasePermissionSet(DatabasePermission.AlterAnySchema);
      dbPermSet.Add(DatabasePermission.AlterAnyUser);

      DatabasePermissionSet dbPermSet2 = new DatabasePermissionSet(DatabasePermission.CreateType);
      dbPermSet2.Add(DatabasePermission.CreateSchema);
      dbPermSet2.Add(DatabasePermission.CreateTable);

      // Creating Database roles
      DatabaseRole role1 = new DatabaseRole(db, "Role1");
      role1.Create();

      DatabaseRole role2 = new DatabaseRole(db, "Role2");
      role2.Create();

      // Granting Database Permission Sets to Roles
      db.Grant(dbPermSet, role1.Name);
      db.Grant(dbPermSet2, role2.Name);

      // Adding members (Users / Roles) to Role
      role1.AddMember("User1");

      role2.AddMember("User2");

      // Role1 becomes a member of Role2
      role2.AddMember("Role1");

      // Enumerating through explicit permissions granted to Role1
      // enumerates all database permissions for the Grantee
      DatabasePermissionInfo[] dbPermsRole1 = db.EnumDatabasePermissions("Role1");
      foreach (DatabasePermissionInfo dbp in dbPermsRole1) {
         Console.WriteLine(dbp.Grantee + " has " + dbp.PermissionType.ToString() + " permission.");
      }
      Console.WriteLine(" ");
   }
}