该 ServerPermission 对象用于向对象分配一组权限或单个服务器权限 ServerPermissionSet 。 对于服务器级别权限,被授权者引用登录。 由 Windows 进行身份验证的登录将列为 Windows 用户名。 运行此代码示例时,它会从被授权者撤消权限,并验证该权限是否已随 EnumServerPermissions 该方法一起删除。
可以使用对象和对象以类似的方式 DatabasePermissionSet 分配数据库权限和 ObjectPermissionSet 数据库对象权限。
示例:
若要使用提供的任何代码示例,必须选择要在其中创建应用程序的编程环境、编程模板和编程语言。 有关详细信息,请参阅 在 Visual Studio .NET 中创建 Visual Basic SMO 项目 ,或在 Visual Studio .NET 中创建 Visual C# SMO 项目。
在 Visual Basic 中授予服务器权限
此代码示例向指定的登录名授予“创建终结点”和“更改任何终结点”权限,然后枚举并显示权限。 撤消其中一个权限,然后再次枚举权限。 此示例假定指定的登录名具有从其开始的指定权限。
' 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 中授予服务器权限#
此代码示例向指定的登录名授予“创建终结点”和“更改任何终结点”权限,然后枚举并显示权限。 撤消其中一个权限,然后再次枚举权限。 此示例假定指定的登录名具有从其开始的指定权限。
// 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 中授予服务器权限
此代码示例向指定的登录名授予“创建终结点”和“更改任何终结点”权限,然后枚举并显示权限。 撤消其中一个权限,然后再次枚举权限。 此示例假定指定的登录名具有从其开始的指定权限。
# 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."
}
}