我正在尝试获取与我数据库中的登录所代表的 AD 组关联的用户列表。我从我的研究中了解到,最好的方法是使用这段代码:
{
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(" ");
}
}
}
这是最好的方法吗?另外,这段代码是在 C# 中,我如何才能在我的 SSMS 中运行它?
SQL Server 中唯一支持的语言1是 T-SQL。话虽如此,使用 T-SQL 获取所需的详细信息非常简单。
返回的结果显示有权访问 SQL Server 的用户,并显示他们所属的提供该访问权限的组。
您需要在 master 数据库中拥有 sysadmin 固定服务器角色的成员身份或公共固定数据库角色的成员身份,并获得 EXECUTE 权限才能执行
xp_logininfo
。您需要 Active Directory 中的标准用户权限才能枚举目录中的项目。1-R 在某些配置中受支持,Python 在 SQL Server 2017及更高版本中受支持。一般来说,您会希望使用 T-SQL。根据您可接受的安全状况,您可以使用 C# 或 Visual Basic 创建一个SQLCLR存储过程,该过程可以从 SQL Server 2005 及更高版本中的 T-SQL 调用。