Dela via


Hantera användare, roller och inloggningar

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSQL-databas i Microsoft Fabric

I SMO representeras inloggningar av det Login objektet. När inloggningen finns i SQL Server kan den läggas till i en serverroll. Serverrollen representeras av ServerRole-objektet. Databasrollen representeras av DatabaseRole-objektet och programrollen representeras av det ApplicationRole objektet.

Behörigheter som är associerade med servernivån visas som egenskaper för det ServerPermission objektet. Behörigheter på servernivå kan beviljas, nekas till eller återkallas från enskilda inloggningskonton.

Varje Database objekt har ett UserCollection objekt som anger alla användare i databasen. Varje användare är associerad med en inloggning. En inloggning kan associeras med användare i mer än en databas. Metoden Login objektets EnumDatabaseMappings kan användas för att visa en lista över alla användare i varje databas som är associerad med inloggningen. Alternativt anger User-objektets egenskap Login den inloggning som är associerad med användaren.

SQL Server-databaser har också roller som anger en uppsättning behörigheter på databasnivå som gör att en användare kan utföra specifika uppgifter. Till skillnad från serverroller är databasroller inte fasta. De kan skapas, ändras och tas bort. Behörigheter och användare kan tilldelas till en databasroll för massadministration.

Exempel

För följande kodexempel måste du välja programmeringsmiljö, programmeringsmallen och programmeringsspråket för att skapa ditt program. Mer information finns i Skapa ett Visual C# SMO-projekt i Visual Studio .NET.

Räkna upp inloggningar och associerade användare i Visual C#

Varje användare i en databas är associerad med en inloggning. Inloggningen kan associeras med användare i mer än en databas. Kodexemplet visar hur du anropar EnumDatabaseMappings-metoden för Login-objektet för att visa en lista över alla databasanvändare som är associerade med inloggningen. Exemplet skapar en inloggning och användare i databasen AdventureWorks2022 för att se till att det finns mappningsinformation att räkna upp.

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

Räkna upp inloggningar och associerade användare i PowerShell

Varje användare i en databas är associerad med en inloggning. Inloggningen kan associeras med användare i mer än en databas. Kodexemplet visar hur du anropar EnumDatabaseMappings-metoden för Login-objektet för att visa en lista över alla databasanvändare som är associerade med inloggningen. Exemplet skapar en inloggning och användare i databasen AdventureWorks2022 för att se till att det finns mappningsinformation att räkna upp.

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

Hantera roller och användare

Det här exemplet visar hur du hanterar roller och användare. Om du vill köra det här exemplet måste du referera till följande sammansättningar:

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