Delen via


Gebruikers, rollen en aanmeldingen beheren

van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSQL-database in Microsoft Fabric

In SMO worden aanmeldingen weergegeven door het Login-object. Wanneer de aanmelding in SQL Server bestaat, kan deze worden toegevoegd aan een serverfunctie. De serverfunctie wordt vertegenwoordigd door het ServerRole-object. De databaserol wordt vertegenwoordigd door het DatabaseRole-object en de toepassingsrol wordt vertegenwoordigd door het ApplicationRole-object.

Bevoegdheden die aan het serverniveau zijn gekoppeld, worden vermeld als eigenschappen van het ServerPermission-object. De bevoegdheden op serverniveau kunnen worden verleend aan, geweigerd of ingetrokken van afzonderlijke aanmeldingsaccounts.

Elk Database-object heeft een UserCollection-object waarmee alle gebruikers in de database worden opgegeven. Elke gebruiker is gekoppeld aan een aanmelding. Eén aanmelding kan worden gekoppeld aan gebruikers in meer dan één database. De EnumDatabaseMappings methode van het Login-object kan worden gebruikt om alle gebruikers weer te geven in elke database die is gekoppeld aan de aanmelding. U kunt ook de eigenschap Login van het User object opgegeven die is gekoppeld aan de gebruiker.

SQL Server-databases hebben ook rollen die een set bevoegdheden op databaseniveau opgeven waarmee een gebruiker specifieke taken kan uitvoeren. In tegenstelling tot serverfuncties worden databaserollen niet opgelost. Ze kunnen worden gemaakt, gewijzigd en verwijderd. Bevoegdheden en gebruikers kunnen worden toegewezen aan een databaserol voor bulkbeheer.

Voorbeeld

Voor de volgende codevoorbeelden moet u de programmeeromgeving, de programmeersjabloon en de programmeertaal selecteren om uw toepassing te maken. Zie Een Visual C# SMO-project maken in Visual Studio .NETvoor meer informatie.

Aanmeldingen en gekoppelde gebruikers in Visual C opsommen#

Elke gebruiker in een database is gekoppeld aan een aanmelding. De aanmelding kan worden gekoppeld aan gebruikers in meer dan één database. In het codevoorbeeld ziet u hoe u de EnumDatabaseMappings methode van het Login-object aanroept om alle databasegebruikers weer te geven die zijn gekoppeld aan de aanmelding. In het voorbeeld wordt een aanmelding en gebruiker gemaakt in de AdventureWorks2022-database om er zeker van te zijn dat er toewijzingsgegevens zijn om te inventariseren.

{
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(" ");
   }
}
}

Aanmeldingen en gekoppelde gebruikers in PowerShell opsommen

Elke gebruiker in een database is gekoppeld aan een aanmelding. De aanmelding kan worden gekoppeld aan gebruikers in meer dan één database. In het codevoorbeeld ziet u hoe u de EnumDatabaseMappings methode van het Login-object aanroept om alle databasegebruikers weer te geven die zijn gekoppeld aan de aanmelding. In het voorbeeld wordt een aanmelding en gebruiker gemaakt in de AdventureWorks2022-database om er zeker van te zijn dat er toewijzingsgegevens zijn om te inventariseren.

# 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]
     }
   }
 }

Rollen en gebruikers beheren

In dit voorbeeld ziet u hoe u rollen en gebruikers beheert. Als u dit voorbeeld wilt uitvoeren, moet u verwijzen naar de volgende assembly's:

  • 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(" ");
   }
}