私はSQL Server 2008 R2 Enterpriseで作業しており、提供されたユーザー名のSQLパスワードを自動的に変更するパスワードジェネレータに取り組んでいます。私は別の場所でスクリプトを見つけて少し修正しました。私が持っている問題は、スクリプトを実行するとエラーが出るということです。以下はコードで、後はエラーです。パスワードの変更に関する動的なSQL構文の問題
set nocount on
declare @PASSWORD_MIN_LENGTH int
declare @PASSWORD_MAX_LENGTH int
declare @LOGIN SYSNAME
select @PASSWORD_MIN_LENGTH = 25
select @PASSWORD_MAX_LENGTH = 25
select @LOGIN = 'Test_User'
declare @PASSWORD_DATA table (PASSWORD_CHAR VARCHAR(1))
declare @NUM table (DIGIT int not null primary key clustered)
insert into @NUM (DIGIT)
select DIGIT = 0 union all select DIGIT = 1 union all
select DIGIT = 2 union all select DIGIT = 3 union all
select DIGIT = 4 union all select DIGIT = 5 union all
select DIGIT = 6 union all select DIGIT = 7 union all
select DIGIT = 8 union all select DIGIT = 9
order by 1
insert into @PASSWORD_DATA (PASSWORD_CHAR)
select
PASSWORD_CHAR =
substring(b.CHARACTERS,a.RAND_INT%b.MOD,1)
from
(select
aa.NUMBER,
RAND_INT = abs(convert(int, convert(varbinary(100), newid())))
from
(select
NUMBER = a.DIGIT+(b.DIGIT*10)
from
@NUM a
cross join
@NUM b) aa
) a
cross join
(select
MOD = len(bb.CHARACTERS)-1,
bb.CHARACTERS
from
(select
CHARACTERS = 'ABCDEFGHJKLMNPQURSUVWXYZ' +
'abcdefghjkmnpqursuvwxyz' +
'ABCDEFGHJKLMNPQURSUVWXYZ' +
'abcdefghjkmnpqursuvwxyz' +
'ABCDEFGHJKLMNPQURSUVWXYZ'+
'abcdefghjkmnpqursuvwxyz' +
'ABCDEFGHJKLMNPQURSUVWXYZ'+
'abcdefghjkmnpqursuvwxyz' +
'23456789'+
'23456789'+
'23456789'+
'23456789'+
'23456789'+
'23456789'+
'23456789'+
'23456789'+
'23456789'+
'23456789'+
'@#$^*+=<>?'+
'@#$^*+=<>?'+
'@#$^*+=<>?'+
'@#$^*+=<>?') bb
) b
order by
newid()
--select * from @PASSWORD_DATA
declare @password varchar(100)
select @password = ''
select @password = @password+PASSWORD_CHAR
from @PASSWORD_DATA
select @password =
-- Random length from MIN to MAX characters
substring(@password,1,
@PASSWORD_MIN_LENGTH +
(abs(convert(int,convert(varbinary(100),newid()))))%(@PASSWORD_MAX_LENGTH [email protected]_MIN_LENGTH+1))
print
'
PASSWORD = '[email protected]+'
exec master.dbo.sp_password
@old = NULL ,
@new = '''[email protected]+''',
@loginame = '''+isnull(@LOGIN,'''')+'''
'
exec master.dbo.sp_password
@old = NULL ,
@new = '''[email protected]+''',
@loginame = '''+isnull(@LOGIN,'''')+'''
exec master.dbo.sp_password
実行後、次のエラーが表示されます。
メッセージ15007、レベル16、状態1、プロシージャsp_passwordを、ライン142
'' + ISNULL(@LOGIN、 '')+ '' は有効なログインではないか、権限がありません。
これはストアドプロシージャに変えて、SQLパスワードを自動的に生成して変更するように求められています。どんな助けもありがとう。 PS。私はボックスのSys Adminです。
サイドノートを:あなたは** **あなたのために 'sp_'接頭辞を使用しないでくださいストアドプロシージャ。マイクロソフトは、[*ストアドプロシージャの名前付け*を参照してください](http://msdn.microsoft.com/en-us/library/ms190669%28v=sql.105%29.aspx)、およびあなたはいつか名前衝突のリスクを将来実行します。 [ストアドプロシージャのパフォーマンスにも悪い](http://www.sqlperformance.com/2012/10/t-sql-queries/sp_prefix)単に 'sp_'を避け、他の何かを接頭辞として使うのが最善です。 –