約70台のサーバーがあり、標準ツールですべてを実行したかった( psgetsid.exeなどは使用しないでください )。
予想通り、私はGoogleから始めました-何も役に立つものが見つかりませんでした。 尊敬されるフォーラムで助けを求めなければなりませんでした。 多くの選択肢が提案されましたが、その多くは善良な人々のおかげですが、残念ながら解決策は見つかりませんでした。
「sql.ruのメンバーでさえわからない場合は、それで終わりだと思いました。」
そして、神経衰弱の寸前で、問題はまだ解決することができました。
まず、少しの理論。 SID(S-1-5-21-3879291865-2298129343-1096376209-3741)を部分的に分析してみましょう:
- S-これがまさにSIDであることを示します。
- 1-コントロールのレベル。
- 5-識別子機関。
- 21-最初の従属機関識別子。
- 3879291865、2298129343、および1096376209-識別子の残りの下位資格情報。すべて一緒に、SIDを発行したドメインまたはコンピューターを示します。
- 3741-相対識別子。
これでスクリプト自体。 私の意見では、関数を作成し、パラメーターを指定して呼び出すことをお勧めします。
-- , .
IF OBJECT_ID (N'dbo.StringSIDToLogin', N'FN') IS NOT NULL
DROP FUNCTION dbo.StringSIDToLogin
GO
CREATE FUNCTION dbo.StringSIDToLogin (@MYSID AS VARCHAR(255))
RETURNS VARCHAR(300)
AS
BEGIN
--
DECLARE @A AS BIGINT ,@B AS BIGINT ,@C AS BIGINT ,@D AS BIGINT
SET @MYSID = REVERSE(@MYSID)
SET @D = REVERSE(SUBSTRING(@MYSID,1,CHARINDEX('-',@MYSID)-1))
SET @MYSID = SUBSTRING(@MYSID,CHARINDEX('-',@MYSID)+1,255)
SET @C = REVERSE(SUBSTRING(@MYSID,1,CHARINDEX('-',@MYSID)-1))
SET @MYSID = SUBSTRING(@MYSID,CHARINDEX('-',@MYSID)+1,255)
SET @B = REVERSE(SUBSTRING(@MYSID,1,CHARINDEX('-',@MYSID)-1))
SET @MYSID = SUBSTRING(@MYSID,CHARINDEX('-',@MYSID)+1,255)
SET @A = REVERSE(SUBSTRING(@MYSID,1,CHARINDEX('-',@MYSID)-1))
declare @sid_sql VARBINARY(100)
DECLARE @StrLogin VARCHAR(100)
set @sid_sql= 0x010500000000000515000000
+ CONVERT(VARBINARY,REVERSE(CONVERT(BINARY(4),@A)))
+ CONVERT(VARBINARY,REVERSE(CONVERT(BINARY(4),@B)))
+ CONVERT(VARBINARY,REVERSE(CONVERT(BINARY(4),@C)))
+ CONVERT(VARBINARY,REVERSE(CONVERT(BINARY(4),@D)))
-- MS SQL
set @StrLogin=SUSER_SNAME(@sid_sql)
set @StrLogin=REPLACE (@StrLogin,'dom\','')
RETURN (@StrLogin)
END
GO
関数を呼び出すだけです。
SELECT dbo.StringSIDToLogin('S-1-5-21-1106671424-631848431-2339101832-7032') AS [Login]
ここでは、簡単なことがわかりました。 そして、アイデア自体がフォーラムで提案されました 。 ありがとう
PS:ハブロウザーに感謝します: rachiu、Zorkus、FeNUMe、Atrax、AusTiNのサポートと新人に対する人間の態度。