Sdílet prostřednictvím


Správa uživatelů, rolí a přihlášení

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analyticssql database v Microsoft Fabric

V SMO jsou přihlášení reprezentována objektem Login. Pokud přihlášení existuje na SQL Serveru, můžete ho přidat do role serveru. Role serveru je reprezentována objektem ServerRole. Role databáze je reprezentována objektem DatabaseRole a role aplikace je reprezentována objektem ApplicationRole.

Oprávnění přidružená k úrovni serveru jsou uvedena jako vlastnosti ServerPermission objektu. Oprávnění na úrovni serveru lze udělit, odepřít nebo odvolat z jednotlivých přihlašovacích účtů.

Každý objekt Database má objekt UserCollection, který určuje všechny uživatele v databázi. Každý uživatel je přidružený k přihlášení. Jedno přihlášení je možné přidružit k uživatelům ve více než jedné databázi. Metodu EnumDatabaseMappings objektu Login lze použít k výpisu všech uživatelů ve všech databázích přidružených k přihlášení. Alternativně vlastnost User objektu Login určuje přihlášení přidružené k uživateli.

Databáze SQL Serveru mají také role, které určují sadu oprávnění na úrovni databáze, která uživateli umožňují provádět konkrétní úlohy. Na rozdíl od rolí serveru se databázové role neopraví. Dají se vytvářet, upravovat a odebírat. Oprávnění a uživatelé je možné přiřadit k databázové roli pro hromadnou správu.

Příklad

Pro následující příklady kódu musíte vybrat programovací prostředí, programovací šablonu a programovací jazyk, abyste mohli vytvořit aplikaci. Další informace najdete v tématu Vytvoření projektu SMO visual C# v sadě Visual Studio .NET.

Vytvoření výčtu přihlášení a přidružených uživatelů v jazyce Visual C#

Každý uživatel v databázi je přidružený k přihlášení. Přihlášení lze přidružit k uživatelům ve více než jedné databázi. Příklad kódu ukazuje, jak volat EnumDatabaseMappings metodu Login objektu pro výpis všech uživatelů databáze, kteří jsou přidruženi k přihlášení. Příklad vytvoří přihlášení a uživatele v databázi AdventureWorks2022, aby se zajistilo mapování informací pro výčet.

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

Výčet přihlášení a přidružených uživatelů v PowerShellu

Každý uživatel v databázi je přidružený k přihlášení. Přihlášení lze přidružit k uživatelům ve více než jedné databázi. Příklad kódu ukazuje, jak volat EnumDatabaseMappings metodu Login objektu pro výpis všech uživatelů databáze, kteří jsou přidruženi k přihlášení. Příklad vytvoří přihlášení a uživatele v databázi AdventureWorks2022, aby se zajistilo mapování informací pro výčet.

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

Správa rolí a uživatelů

Tato ukázka ukazuje, jak spravovat role a uživatele. Pokud chcete spustit tuto ukázku, budete muset odkazovat na následující sestavení:

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