新用户SQL Server登录失败

时间:2018-03-19 17:06:55

标签: sql sql-server

我正在尝试创建一个只能访问一些视图和过程的用户。用户似乎创建得很好,但是当我尝试使用下面的连接字符串登录到用户帐户时,我收到错误Login failed for user 'Interface_Admin'

User ID=Interface_Admin;Password=letmein01;Integrated Security=False;server=SQL02;database=TESTDB;Trusted_Connection=False;

我在下面创建用户和授予权限的代码。

USE TESTDB
GO

IF EXISTS (SELECT * FROM sys.database_principals WHERE name = N'Interface_Admin') DROP USER Interface_Admin
IF EXISTS (SELECT * FROM master.dbo.syslogins WHERE name = 'Interface_Admin_Login') DROP LOGIN Interface_Admin_Login
IF EXISTS (SELECT * FROM sys.database_principals WHERE name = N'Interface_Users') DROP ROLE Interface_Users

-- Create role and add user accounts
CREATE ROLE Interface_Users
CREATE LOGIN Interface_Admin_Login WITH PASSWORD = 'letmein01'
CREATE USER Interface_Admin FROM LOGIN Interface_Admin_Login
EXEC sp_addrolemember @rolename='Interface_Users', @membername='Interface_Admin'
GO

-- Grant permissions
-- Views
GRANT SELECT ON Vw_Interface_Main TO Interface_Users;

-- Procedures
GRANT EXECUTE ON Proc_GetNextFileSequence TO Interface_Users;
GRANT EXECUTE ON Proc_OutboundFiles TO Interface_Users;
GRANT EXECUTE ON Proc_InsertOrUpdateFile TO Interface_Users;

2 个答案:

答案 0 :(得分:1)

您的原始脚本已使用Interface_Admin_Login创建登录,但连接字符串中的用户ID为Interface_Admin

登录应使用登录名,而不是用户名。 Login =访问实例,用户用于处理每个数据库中的权限。通常创建的用户名与登录名相同,以避免混淆。

答案 1 :(得分:0)

所以,我认为这归结于我的误解,但我能够通过为用户和登录提供相同的名称来解决这个问题。

-- Create role and add user accounts
CREATE ROLE Interface_Users
CREATE LOGIN Interface_Admin WITH PASSWORD = 'letmein01'
CREATE USER Interface_Admin FROM LOGIN Interface_Admin
EXEC sp_addrolemember @rolename='Interface_Users', @membername='Interface_Admin'
GO