在 SQL Server 2000 中哪些任务只能由系统管理员执行?

MAW*_*656 2 security sql-server permissions sql-server-2000

我正在清理我的 SQL Server 2000 上的权限,并且我想验证某个特定帐户是否仍然具有 sysadmin 权限。
哪些非破坏性任务只能由系统管理员执行,我可以用来确认这一点?

dat*_*god 5

您可以使用该帐户创建另一个登录名,并授予其系统管理员权限。

  • securityadmin 固定服务器角色被授予 ALTER ANY LOGIN,这意味着它可以管理实例上的任何登录,包括在实例和数据库级别分配权限。自 SQL 2000 以来,Microsoft 已更新了大部分文档,以引起人们注意安全管理员应被视为系统管理员这一事实 (http://msdn.microsoft.com/en-us/library/ms175892(v=sql.105) .aspx) (3认同)
  • 这不是只有系统管理员才能执行的操作。 (2认同)

Roi*_*ish 5

您根本不需要执行任何任务(破坏性或非破坏性)。

您可以使用内置函数IS_SRVROLEMEMBER来查找某个人LOGIN是否是sysadmin服务器角色的成员:

SELECT IS_SRVROLEMEMBER('sysadmin','<LoginName>');
Run Code Online (Sandbox Code Playgroud)

请注意,对于sysadmin结果以外的角色,对于隐式成员资格也将是正数 (=1) 。

您可以使用内置存储过程sp_helpsrvrolemember来获取某个角色的所有显式成员的列表:

EXEC sys.sp_helpsrvrolemember @srvrolename = 'sysadmin';
Run Code Online (Sandbox Code Playgroud)

或者所有服务器角色的所有显式成员的完整列表:

EXEC sys.sp_helpsrvrolemember;
Run Code Online (Sandbox Code Playgroud)

对于 SQL Server 2000,还可以使用以下选项对结果集进行排序或过滤:

CREATE TABLE #ServerRoles 
( 
  ServerRole VARCHAR(20), 
  MemberName sysname, 
  sid VARBINARY(85) 
); 

INSERT INTO #ServerRoles 
(ServerRole, MemberName, sid) 
EXEC sys.sp_helpsrvrolemember;

SELECT SR.MemberName, SR.ServerRole 
FROM #ServerRoles SR 
WHERE 1 = 1                            -- Change this to any filter you want
ORDER BY SR.MemberName, SR.ServerRole; -- Change this to any sorting you want

DROP TABLE #ServerRoles;
GO
Run Code Online (Sandbox Code Playgroud)

对于 SQL Server 2005+,已经有一个可以直接查询的系统视图:
sys.server_role_members,它是roles和之间的多对多关系表logins