2013-05-20 44 views
1

可以使用osql.exe或sqlcmd.exe更改實例的密碼策略嗎?我有一個創建數據庫和用戶的批處理腳本,但正如您所知,「sp_addlogin」存儲過程在創建用戶時似乎沒有允許少於8個字符密碼的選項。 如何在使用「sp_addlogin」創建登錄之前使用調用osql的批處理腳本降低此策略要求?可以使用osql.exe或sqlcmd.exe來更改實例的默認密碼策略嗎?

這裏是我如何做到這一點至今:

-- CREATE USER 2005/2008 sql generated from batch file 
-- where username and db name are the same 
IF NOT EXISTS (SELECT * FROM master.dbo.syslogins WHERE loginname = N'teee') 
BEGIN 
    declare @loginlang nvarchar(132) 
    SELECT @loginlang = N'us_english' 
    IF @loginlang IS NULL OR (NOT EXISTS (SELECT * FROM master.dbo.syslanguages WHERE name = @loginlang) and @loginlang != N'us_english') 
    SELECT @loginlang = @@language 
EXEC sp_addlogin N'teee', N'PassMe', N'TEEE', @loginlang 
ALTER LOGIN teee WITH PASSWORD = 'PassMe' UNLOCK, CHECK_POLICY = OFF, CHECK_EXPIRATION = OFF 
END 
GO 
IF NOT EXISTS (SELECT * FROM dbo.sysusers WHERE name = N'teee' and status != 0) 
EXEC sp_grantdbaccess N'teee', N'teee' 
GO 
EXEC sp_addrolemember N'db_datareader', N'teee' 
GO 
EXEC sp_addrolemember N'db_datawriter', N'teee' 
GO 
EXEC sp_addrolemember N'db_owner', N'teee' 
GO 

我得到的錯誤,當我運行是這樣的:

Msg 15116, Level 16, State 1, Server U0163499, Line 1 
Password validation failed. The password does not meet Windows policy requirements because it is too short. 
Msg 15151, Level 16, State 1, Server U0163499, Line 10 
Cannot alter the login 'teee', because it does not exist or you do not have permission. 

顯然,如果我使用密碼大於或等於8個字符創建用戶時,它工作正常。我需要一個解決方案,也適用於SQL 2012

回答

1

代碼

EXEC sp_addlogin N'teee', N'PassMe', N'TEEE', @loginlang 
ALTER LOGIN teee WITH PASSWORD = 'PassMe' UNLOCK, CHECK_POLICY = OFF, 
CHECK_EXPIRATION = OFF 

請使用具有以下線以上線路:

USE [master] 
GO 
CREATE LOGIN [teee] WITH PASSWORD=N'PassMe', 
DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF 
GO 

這對我代碼工作

IF NOT EXISTS (SELECT * FROM master.dbo.syslogins WHERE loginname = N'teee') 
BEGIN 
    declare @loginlang nvarchar(132) 
    SELECT @loginlang = N'us_english' 
    IF @loginlang IS NULL OR (NOT EXISTS (
    SELECT * FROM master.dbo.syslanguages WHERE name = @loginlang) 
    and @loginlang != N'us_english') 
    SELECT @loginlang = @@language 

--EXEC sp_addlogin N'teee', N'PassMe', N'TEEE', @loginlang 
--ALTER LOGIN teee WITH PASSWORD = 'PassMe' UNLOCK, 
--CHECK_POLICY = OFF, CHECK_EXPIRATION = OFF 

CREATE LOGIN [teee] WITH PASSWORD=N'PassMe', 
DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF 
END 
GO 
IF NOT EXISTS (SELECT * FROM dbo.sysusers WHERE name = N'teee' and status != 0) 
EXEC sp_grantdbaccess N'teee', N'teee' 
GO 
EXEC sp_addrolemember N'db_datareader', N'teee' 
GO 
EXEC sp_addrolemember N'db_datawriter', N'teee' 
GO 
EXEC sp_addrolemember N'db_owner', N'teee' 

GO

+0

我不相信該解決方案也將在SQL 2012上工作。我不相信「CREATE USER」在SQL2012上工作了,這就是爲什麼我被迫使用存儲過程版本(因爲它的工作原理2008年和2012年)。我錯了嗎? – djangofan

+0

我使用SSMS在MSSQL 2012框上測試'tsql'。 Osql.exe在2012年不起作用,但sqlcmd可以正常工作。你用SSMS在你的盒子上試過了嗎?如果你那麼錯誤是什麼? – Hiten004

+0

你是對的。它確實有效。我只需要測試這個場景。非常感謝。 – djangofan

相關問題