2015-01-15 66 views
0

我試圖創建一個存儲過程來創建對我的數據庫的登錄和宏訪問。但是,當我在SQL文件中運行代碼和一個可以創建新的登錄,並登錄到SQL Server成功:創建登錄後,無法登錄並通過存儲過程授予對數據庫的訪問

Use DuLieuChuan 
GO 
CREATE LOGIN TestLogin WITH PASSWORD = '123456789', 
    DEFAULT_DATABASE=[master], 
    DEFAULT_LANGUAGE=[English], 
    CHECK_EXPIRATION=ON, 
    CHECK_POLICY=ON; 
GO 
CREATE USER db_TestLogin FROM LOGIN TestLogin; 
GO 
ALTER LOGIN TestLogin ENABLE; 

但我創建一個存儲過程的代碼:

CREATE PROC [dbo].[addDBMSLogin] 
( 
    @loginname nvarchar(100), 
    @password nchar(100) 
) 
AS 
BEGIN 

    DECLARE @safe_login varchar(200) 
    DECLARE @safe_password varchar(200) 
    SET @safe_login = replace(@loginname,'''', '''''') 
    SET @safe_password = replace(@password,'''', '''''') 

    DECLARE @sql nvarchar(max) 
    SET @sql = 'CREATE LOGIN ' + @safe_login + 
        ' WITH PASSWORD = ''' + @safe_password + ''', DEFAULT_DATABASE=[DuLieuChuan], DEFAULT_LANGUAGE=[English], CHECK_EXPIRATION=ON, CHECK_POLICY=ON ' + 
       'CREATE USER ' + @safe_login + ' FROM LOGIN ' + @safe_login + ';' 
    EXEC (@sql) 

    EXEC sys.sp_addsrvrolemember @loginame = @safe_login, @rolename = N'sysadmin'; 

    SET @SQL = 'ALTER LOGIN ' + @safe_login + ' ENABLE'; 
    EXECUTE(@SQL); 
END 

執行此過程後,我還可以創建一個新的登錄名,但我不能使用該登錄名登錄到SQL Server後續消息:

TITLE: Connect to Server 
------------------------------ 

Cannot connect to *****. 

------------------------------ 
ADDITIONAL INFORMATION: 

Login failed for user 'test5'. (Microsoft SQL Server, Error: 18456) 

For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&EvtSrc=MSSQLServer&EvtID=18456&LinkId=20476 

------------------------------ 

你能幫助我,爲什麼?這是我的期末考試:)

非常感謝!

+0

嘗試拆分兩個查詢的登錄和用戶創建查詢,並逐個執行它們 –

+0

感謝Andy! 我嘗試了,但我仍然無法使用存儲過程創建的登錄名登錄:) –

回答

1

變化

CREATE PROC [dbo].[addDBMSLogin] 
( 
    @loginname nvarchar(100), 
    @password nchar(100) 
) 

CREATE PROC [dbo].[addDBMSLogin] 
( 
    @loginname nvarchar(100), 
    @password nvarchar(100) 
) 

您的密碼被用空格填充。

+0

是啊!謝謝你支持我。這非常好。我嘗試登錄成功。 :) –

+0

歡迎:) – Fred