2016-01-19 20 views
6

2列の表がありますが、そのうちの1つはWHOAMIコマンドの結果を挿入します。次の操作を実行しようとしましたが、私はそれが原因の列の異なる量に動作しません推測:SQL Server:WHOAMIの結果を表に挿入

UPDATE tblName 
SET colName = (xp_cmdshell 'whoami.exe') 
WHERE id = 1 

答えて

3
DECLARE @t TABLE (Value VARCHAR(8000)) 

INSERT INTO @t 
EXEC sys.xp_cmdshell 'whoami' 

UPDATE tblName 
SET colName = 
    (
     SELECT TOP(1) Value 
     FROM @t 
     WHERE Value IS NOT NULL 
    )    
WHERE id = 1 
3

WindowsまたはSQLログイン可能性データベース(にログインしているユーザーが必要な場合)、あなたは本当に)あなたがwhoami.exeから取得したいものですSQL Serverプロセスを(実行しているサービスアカウントを使用する場合は代わりに

UPDATE tblName set colName = SUSER_NAME() WHERE id=1 

は、あなたが使用したほうが良いかもしれSUSER_NAME()機能に組み込まれ使用することができますsys.dm_server_servicesビュー、有効にする必要はありませんxp_cmdshellは、(それが適切にロックダウンされていない場合は、いくつかのセキュリティ上のリスクをもたらすことができます)(注:これは最低でもSQL Serverの2008R2 SP1が必要です):

UPDATE tblName 
SET colName = (
    SELECT TOP 1 
     service_account 
    FROM sys.dm_server_services 
    WHERE servicename LIKE 'SQL Server (%') 
WHERE id=1 

そう

DECLARE @output TABLE (v varchar(200)) 

INSERT @output (v) exec xp_cmdshell 'whoami.exe' 

UPDATE tblName SET colName = (select top 1 * from @output) WHERE id=1 
+0

SUSER_NAME()のみのSAに戻しますすべての列ではなく – pee2pee

+0

SQL Serverを実行しているサービスアカウントではなく、現在のユーザーを提供します。更新に行く。 –

+0

@ pee2pee、私はいくつかの他のオプションを与えるために私の答えを少し更新しました。私は個人的に 'dm_server_services'ビューを使うつもりです。なぜなら、私は一般に何かに関与しているxp_cmdshellについて心配したくないからです。 –

関連する問題