2013-05-20 45 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

相关问题