获取SQL代理服务的服务帐户详细信息

Joh*_*ohn 10 sql sql-server sql-server-2005 wmi-query

如何获取特定SQL Server的SQL代理服务的服务帐户名称(SQL 2005).是否可以使用SQL语句或WMI?

Kyl*_*Mit 9

正如Aaron Bertrand所指出的,您可以使用xp_regreadSQL Server 2005和SQL Server 2008中未记录的文档,但是有一种更好的方法,从SQL Server 2008R2 SP1开始.

从文章如何在T-SQL中识别SQL Server服务帐户,您可以这样使用sys.dm_server_services:

SELECT  DSS.servicename,
        DSS.startup_type_desc,
        DSS.status_desc,
        DSS.last_startup_time,
        DSS.service_account,
        DSS.is_clustered,
        DSS.cluster_nodename,
        DSS.filename,
        DSS.startup_type,
        DSS.status,
        DSS.process_id
FROM    sys.dm_server_services AS DSS;
Run Code Online (Sandbox Code Playgroud)

SQL服务帐户查询结果


Con*_*rix 8

由于SQL Server作为Windows服务运行,因此您可以使用wmic来查询起始名称.

wmic service where "name Like 'MSSQL%'" get Name , StartName
Run Code Online (Sandbox Code Playgroud)

对我来说,这输出以下内容(因为我有多个实例,所以也包含了thos)

Name                    StartName
MSSQL$SQLEXPRESS        NT AUTHORITY\NetworkService
MSSQL$SQLEXPRESS2005    NT AUTHORITY\NetworkService
MSSQLFDLauncher         NT AUTHORITY\NETWORK SERVICE
MSSQLSERVER             NT AUTHORITY\NETWORK SERVICE
MSSQLServerADHelper     NT AUTHORITY\NetworkService
MSSQLServerADHelper100  NT AUTHORITY\NETWORK SERVICE
MSSQLServerOLAPService  NT AUTHORITY\NETWORK SERVICE
Run Code Online (Sandbox Code Playgroud)

您可以添加/NODE到查询远程计算机.与任何WMI查询一样,您需要足够的权限才能使其正常工作

或者使用Powershell的Get-WmiObject(支持远程/多个计算机名)的相同查询:

Get-WmiObject Win32_Service -ComputerName localhost,W-Remote -Filter "name Like 'MSSQL%'" | ft __Server,State,Name,DisplayName,StartName -AutoSize
Run Code Online (Sandbox Code Playgroud)

样本输出:

__SERVER State   Name                   DisplayName                         StartName
-------- -----   ----                   -----------                         ---------
W0123456 Stopped MSSQL$SQLEXPRESS       SQL Server (SQLEXPRESS)             NT AUTHORITY\NETWORK SERVICE
W0123456 Running MSSQLSERVER            SQL Server (MSSQLSERVER)            LocalSystem
W0123456 Stopped MSSQLServerADHelper100 SQL Active Directory Helper Service NT AUTHORITY\NETWORKSERVICE
W-REMOTE Stopped MSSQL$SQLEXPRESS       SQL Server (SQLEXPRESS)             NT AUTHORITY\NETWORK SERVICE
W-REMOTE Running MSSQLSERVER            SQL Server (MSSQLSERVER)            LocalSystem
Run Code Online (Sandbox Code Playgroud)


Aar*_*and 7

对于默认实例:

DECLARE @sn NVARCHAR(128);

EXEC master.dbo.xp_regread
    'HKEY_LOCAL_MACHINE',
    'SYSTEM\CurrentControlSet\services\SQLSERVERAGENT',
    'ObjectName', 
    @sn OUTPUT;

SELECT @sn;
Run Code Online (Sandbox Code Playgroud)

对于命名实例,您需要第二个参数:

    'SYSTEM\CurrentControlSet\services\SQLAGENT$InstanceName',
Run Code Online (Sandbox Code Playgroud)

现在,它可能无法工作,因为您可能无法访问xp_regread,并且此属性的位置可能会因版本而异(我只测试了2008,2008 R2和Denali - 我没有方便检查2005实例) .

在任何情况下,您最好不要询问DBA(如评论中所述),或者,如果您有权访问物理机,只需检查控制面板中的服务帐户即可.


小智 3

您可以使用sc.exe

要查找 SQL 实例服务:

sc \\<remote computer name> query | find /i "sql"
Run Code Online (Sandbox Code Playgroud)

获取配置:

sc \\<remote computer name> qc <service name from listing above>
Run Code Online (Sandbox Code Playgroud)