授予、撤消和拒绝权限
ServerPermission 对象用于将一组权限或单个服务器权限分配给 ServerPermissionSet 对象。对于服务器级权限,被授权者指登录名。由 Windows 进行身份验证的登录名以 Windows 用户名的形式列出。当此代码示例运行时,它会撤消被授权者的权限并确认已使用 EnumServerPermissions 方法删除该被授权者。
可以使用 DatabasePermissionSet 对象和 ObjectPermissionSet 对象以类似方式分配数据库权限和数据库对象权限。
示例
若要使用所提供的任何代码示例,您必须选择创建应用程序所需的编程环境、编程模板和编程语言。有关详细信息,请参阅如何在 Visual Studio .NET 中创建 Visual Basic SMO 项目或如何在 Visual Studio .NET 中创建 Visual C# SMO 项目。
在 Visual Basic 中授予服务器权限
此代码示例将 Create Endpoint 和 Alter Any Endpoint 权限授予指定的登录名,然后枚举并显示权限。将撤消其中一个权限,然后再次枚举权限。此示例假定指定的登录名具有指定的起始操作权限。
' compile with: /r:Microsoft.SqlServer.Smo.dll /r:Microsoft.SqlServer.ConnectionInfo.dll
' /r:Microsoft.SqlServer.Management.Sdk.Sfc.dll /r:Microsoft.SqlServer.SqlEnum.dll
Imports Microsoft.SqlServer.Management.Smo
Public Class A
Public Shared Sub Main()
Dim svr As New Server()
' Creating the logins (Grantee)
Dim vGrantee As [String] = "Grantee1"
Dim login As New Login(svr, vGrantee)
login.LoginType = LoginType.SqlLogin
login.Create("password@1")
Dim vGrantee2 As [String] = "Grantee2"
Dim login2 As New Login(svr, vGrantee2)
login2.LoginType = LoginType.SqlLogin
login2.Create("password@2")
' Define a ServerPermissionSet that contains permission to Create Endpoint and Alter Any Endpoint.
Dim sps As New ServerPermissionSet(ServerPermission.CreateEndpoint)
sps.Add(ServerPermission.AlterAnyEndpoint)
' Grant Create Endpoint and Alter Any Endpoint permissions to Grantee
svr.Grant(sps, vGrantee)
svr.Grant(sps, vGrantee2)
' Enumerate and display the server permissions in the set for the grantee specified in the vGrantee string variable.
Dim spis As ServerPermissionInfo() = svr.EnumServerPermissions(vGrantee, sps)
'enumerates all server permissions for the Grantee from the specified permission set
Console.WriteLine("===========Before revoke==================")
For Each spi As ServerPermissionInfo In spis
Console.WriteLine(spi.Grantee + " has " & spi.PermissionType.ToString() & " permission.")
Next
Console.WriteLine(" ")
' Revoke the create endpoint permission from the grantee.
svr.Revoke(New ServerPermissionSet(ServerPermission.CreateEndpoint), vGrantee)
' Enumerate and display the server permissions in the set for the grantee specified in the vGrantee string variable.
spis = svr.EnumServerPermissions(vGrantee, sps)
Console.WriteLine("=========After revoke================")
For Each spi As ServerPermissionInfo In spis
Console.WriteLine(spi.Grantee + " has " & spi.PermissionType.ToString() & " permission.")
Next
Console.WriteLine(" ")
' Grant the Create Server Role permission to the grantee.
svr.Grant(New ServerPermissionSet(ServerPermission.ViewAnyDatabase), vGrantee)
' Enumerate and display the server permissions for the grantee specified in the vGrantee string variable.
' enumerates all server permissions for the Grantee
spis = svr.EnumServerPermissions(vGrantee)
Console.WriteLine("=========After grant===============")
For Each spi As ServerPermissionInfo In spis
Console.WriteLine(spi.Grantee + " has " & spi.PermissionType.ToString() & " permission.")
Next
Console.WriteLine("")
' Enumerate and display the server permissions in the set for all logins.
spis = svr.EnumServerPermissions(sps)
'enumerates all server permissions in the set for all logins
Console.WriteLine("=========After grant===============")
For Each spi As ServerPermissionInfo In spis
Console.WriteLine(spi.Grantee + " has " & spi.PermissionType.ToString() & " permission.")
Next
Console.WriteLine("")
End Sub
End Class
在 Visual C# 中授予服务器权限
此代码示例将 Create Endpoint 和 Alter Any Endpoint 权限授予指定的登录名,然后枚举并显示权限。将撤消其中一个权限,然后再次枚举权限。此示例假定指定的登录名具有指定的起始操作权限。
// compile with: /r:Microsoft.SqlServer.Smo.dll /r:Microsoft.SqlServer.ConnectionInfo.dll
// /r:Microsoft.SqlServer.Management.Sdk.Sfc.dll /r:Microsoft.SqlServer.SqlEnum.dll
using System;
using Microsoft.SqlServer.Management.Smo;
public class A {
public static void Main() {
Server svr = new Server();
// Creating the logins (Grantee)
String vGrantee = "Grantee1";
Login login = new Login(svr, vGrantee);
login.LoginType = LoginType.SqlLogin;
login.Create("password@1");
String vGrantee2 = "Grantee2";
Login login2 = new Login(svr, vGrantee2);
login2.LoginType = LoginType.SqlLogin;
login2.Create("password@2");
// Define a ServerPermissionSet that contains permission to Create Endpoint and Alter Any Endpoint.
ServerPermissionSet sps = new ServerPermissionSet(ServerPermission.CreateEndpoint);
sps.Add(ServerPermission.AlterAnyEndpoint);
// Grant Create Endpoint and Alter Any Endpoint permissions to Grantee
svr.Grant(sps, vGrantee);
svr.Grant(sps, vGrantee2);
// Enumerate and display the server permissions in the set for the grantee specified in the vGrantee string variable.
ServerPermissionInfo[] spis = svr.EnumServerPermissions(vGrantee, sps); //enumerates all server permissions for the Grantee from the specified permission set
Console.WriteLine("===========Before revoke==================");
foreach (ServerPermissionInfo spi in spis) {
Console.WriteLine(spi.Grantee + " has " + spi.PermissionType.ToString() + " permission.");
}
Console.WriteLine(" ");
// Revoke the create endpoint permission from the grantee.
svr.Revoke(new ServerPermissionSet(ServerPermission.CreateEndpoint), vGrantee);
// Enumerate and display the server permissions in the set for the grantee specified in the vGrantee string variable.
spis = svr.EnumServerPermissions(vGrantee, sps);
Console.WriteLine("=========After revoke================");
foreach (ServerPermissionInfo spi in spis) {
Console.WriteLine(spi.Grantee + " has " + spi.PermissionType.ToString() + " permission.");
}
Console.WriteLine(" ");
// Grant the Create Server Role permission to the grantee.
svr.Grant(new ServerPermissionSet(ServerPermission.ViewAnyDatabase), vGrantee);
// Enumerate and display the server permissions for the grantee specified in the vGrantee string variable.
// enumerates all server permissions for the Grantee
spis = svr.EnumServerPermissions(vGrantee);
Console.WriteLine("=========After grant===============");
foreach (ServerPermissionInfo spi in spis) {
Console.WriteLine(spi.Grantee + " has " + spi.PermissionType.ToString() + " permission.");
}
Console.WriteLine("");
// Enumerate and display the server permissions in the set for all logins.
spis = svr.EnumServerPermissions(sps); //enumerates all server permissions in the set for all logins
Console.WriteLine("=========After grant===============");
foreach (ServerPermissionInfo spi in spis) {
Console.WriteLine(spi.Grantee + " has " + spi.PermissionType.ToString() + " permission.");
}
Console.WriteLine("");
}
}
在 PowerShell 中授予服务器权限
此代码示例将 Create Endpoint 和 Alter Any Endpoint 权限授予指定的登录名,然后枚举并显示权限。将撤消其中一个权限,然后再次枚举权限。此示例假定指定的登录名具有指定的起始操作权限。
# Set the path context to the local, default instance of SQL Server.
CD \sql\localhost\
$srv = get-item default
#The subject login:
# \"Place Login Name here - has permission to Create Endpoints\"
$vGrantee = "LoginName"
#This sample assumes that the grantee already has permission to Create Endpoints.
$sps = New-Object -TypeName Microsoft.SqlServer.Management.SMO.ServerPermissionSet
$sps.CreateEndpoint = $true
$sps.AlterAnyEndpoint = $true
#This sample assumes that the grantee already has permission to Create Endpoints.
#Enumerate and display the server permissions in the set for the grantee specified
# in the vGrantee string variable.
$spis = $srv.EnumServerPermissions($vGrantee)
"=================Before revoke==========================="
foreach ( $spi in $spis)
{
$spi.Grantee + " has " + $spi.PermissionType + " permission."
}
""
#remove perission to create an endpoint
$sps.CreateEndpoint = $false
$srv.Revoke($sps, $vGrantee)
#Enumerate and display the server permissions in the set for the grantee specified
# in the vGrantee string variable.
$spis = $srv.EnumServerPermissions($vGrantee)
"=================After revoke==========================="
foreach ( $spi in $spis)
{
$spi.Grantee + " has " + $spi.PermissionType + " permission."
}
""
#Grant the revoked permissions back
$sps.CreateEndpoint = $true
$sps.AlterAnyEndpoint = $true
$srv.Grant($sps, $vGrantee)
#Enumerate and display the server permissions in the set for the grantee specified
# in the vGrantee string variable.
$spis = $srv.EnumServerPermissions($vGrantee)
"=================After grant==========================="
foreach ( $spi in $spis)
{
$spi.Grantee + " has " + $spi.PermissionType + " permission."
}
}