2列の表がありますが、そのうちの1つはWHOAMI
コマンドの結果を挿入します。次の操作を実行しようとしましたが、私はそれが原因の列の異なる量に動作しません推測:SQL Server:WHOAMIの結果を表に挿入
UPDATE tblName
SET colName = (xp_cmdshell 'whoami.exe')
WHERE id = 1
2列の表がありますが、そのうちの1つはWHOAMI
コマンドの結果を挿入します。次の操作を実行しようとしましたが、私はそれが原因の列の異なる量に動作しません推測:SQL Server:WHOAMIの結果を表に挿入
UPDATE tblName
SET colName = (xp_cmdshell 'whoami.exe')
WHERE id = 1
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
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
SUSER_NAME()のみのSAに戻しますすべての列ではなく – pee2pee
SQL Serverを実行しているサービスアカウントではなく、現在のユーザーを提供します。更新に行く。 –
@ pee2pee、私はいくつかの他のオプションを与えるために私の答えを少し更新しました。私は個人的に 'dm_server_services'ビューを使うつもりです。なぜなら、私は一般に何かに関与しているxp_cmdshellについて心配したくないからです。 –