10

特定の SQL Server (SQL 2005) の SQL Agent サービスのサービス アカウント名を取得する方法を教えてください。SQL ステートメントまたは WMI を使用して取得することは可能ですか?

4

5 に答える 5

8

SQL ServerはWindowsサービスとして実行されるため、wmicを使用して開始名を照会できます。

wmic service where "name Like 'MSSQL%'" get Name , StartName

私の場合、これは次のように出力します(複数のインスタンスがあるため、これらも含まれています)

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

/NODEリモートコンピュータのクエリに追加できます。他のWMIクエリと同様に、これを機能させるには十分な特権が必要です。

または、 PowershellのGet-WmiObject(リモート/複数のコンピューター名をサポート)を使用した同じクエリ:

Get-WmiObject Win32_Service -ComputerName localhost,W-Remote -Filter "name Like 'MSSQL%'" | ft __Server,State,Name,DisplayName,StartName -AutoSize

サンプル出力:

__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
于 2011-09-06T19:34:03.500 に答える
7

デフォルトのインスタンスの場合:

DECLARE @sn NVARCHAR(128);

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

SELECT @sn;

名前付きインスタンスの場合、2 番目の引数を次のようにする必要があります。

    'SYSTEM\CurrentControlSet\services\SQLAGENT$InstanceName',

現在、xp_regread にアクセスできない可能性があり、このプロパティの場所がバージョンごとに変わる可能性があるため、機能しない可能性があります (2008、2008 R2、および Denali のみをテストしました - 2005 のインスタンスを確認するのに便利な場所はありません)。 .

いずれにしても、(コメントで提案されているように) DBA に問い合わせるか、物理マシンにアクセスできる場合は、コントロール パネルでサービス アカウントを確認することをお勧めします。

于 2011-09-06T19:05:26.740 に答える
3

sc.exeを使用できます。

SQL インスタンス サービスを検索するには:

sc \\<remote computer name> query | find /i "sql"

構成を取得するには:

sc \\<remote computer name> qc <service name from listing above>
于 2013-08-08T13:38:29.930 に答える
1

これは古いスレッドであることは知っていますが、これが私の解決策です。これは、SQL Server 2000、2005、2008、2008 R2、2012、2014、および 2016 に対してテストされています。

if (select CONVERT(INT, (REPLACE(SUBSTRING(convert(nvarchar, SERVERPROPERTY('ProductVersion')), 1, 2), '.', '')))) >10
BEGIN
select distinct(service_account) AS SvcAccount from sys.dm_server_services;
END

ELSE
BEGIN
DECLARE @instanceName varchar(100)
set @instanceName    = convert(varchar,SERVERPROPERTY ('InstanceName'))
IF (@instanceName) IS NULL
begin
DECLARE @sn NVARCHAR(128);
EXEC master.dbo.xp_regread
    'HKEY_LOCAL_MACHINE',
    'SYSTEM\CurrentControlSet\services\SQLSERVERAGENT',
    'ObjectName', 
    @sn  OUTPUT ;

SELECT @sn AS SvcAccount;
END
ELSE
BEGIN 

DECLARE @SQL varchar (500)
SET @SQL  = 'DECLARE @sn NVARCHAR(128); exec master.dbo.xp_regread ''HKEY_LOCAL_MACHINE'', ''SYSTEM\CurrentControlSet\services\SQLAgent$'+@instanceName+''',''ObjectName'', @sn OUTPUT; SELECT @sn AS SvcAccount;'
EXEC (@SQL)

END
END
于 2017-05-25T21:16:31.370 に答える