質問

特定のSQLサーバーのSQLエージェントサービスのサービスアカウント名を取得するにはどうすればよいですか(SQL 2005)。 SQLステートメントまたはWMIを使用することは可能ですか?

役に立ちましたか?

解決

使用できます Sc.exe.

SQLインスタンスサービスを見つけるには:

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

構成を取得するには:

sc \\<remote computer name> qc <service name from listing above>

他のヒント

アーロン・バートランドが指摘したように、あなたは文書化されていないものを使うことができます xp_regread SQL 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;

SQL Service Account Query Results

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

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

私にとってこれは次の出力を出力します(私は複数のインスタンスも持っているので、THOESが含まれています)

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 (リモート/複数のComputerSnamesをサポート):

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

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

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を尋ねることはおそらく、または物理マシンにアクセスできる場合は、コントロールパネルのサービスアカウントをチェックするだけです。

私はこれが古いスレッドであることを知っていますが、ここに私の解決策があります。これは、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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top