2013-12-12 4 views
0

SQL Server에서만 저장 프로 시저를 실행할 수있는 사용자를 만들어야합니다. 내가 오류 메시지가 오류 코드 18456. "사용자가 로그인하지 못했습니다"얻을 SUSER로 SSMS를 사용하여 로그인을 시도하지만 인 slogin와 비밀번호를 사용하여 로그인 할 수 있습니다 때 나는이 쿼리SQL Server 2008에서 사용자가 로그인하지 못했습니다.

CREATE LOGIN SLogin WITH PASSWORD=N'#######', DEFAULT_DATABASE=MyDB, CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF 

CREATE USER SUser FOR LOGIN [SLogin] 
WITH DEFAULT_SCHEMA = MyDB 

CREATE ROLE SUserRole AUTHORIZATION SUser 

GRANT SELECT, INSERT, ALTER, EXECUTE TO SUserRole 

을 문제가 사용할 수 있습니다.

내가이 연결 문자열 Data Source=############\MSSQLSERVER,1433;Initial Catalog=MyDB;User ID=SLogin;Password=######;

나는 연결을 열 수 있어요하지만, 저장 프로 시저를 실행할 수 없습니다를 사용하는 경우의 C#에서 저장 프로 시저를 실행하려고

. 사용자가이 스키마에 액세스 할 수 없다고합니다.

그리고 사용자 ID로 SUser를 사용하면 연결 문자열에서 연결을 열 수 없습니다.

제가 잘못하고있는 부분을 찾으십시오.

답변

1

1 - 마스터에서 시작하고 로그인을 만듭니다. 이 예제에서는 기본값으로 [BSA] 데이터베이스를 사용합니다.

-- Which database to use. 
USE [master] 
GO 


-- Delete existing login. 
IF EXISTS (SELECT * FROM sys.server_principals WHERE name = N'BSA_ADMIN') 
DROP LOGIN [BSA_ADMIN] 
GO 

-- Add new login. 
CREATE LOGIN [BSA_ADMIN] WITH PASSWORD=N'M0a2r0c9h11$', 
    CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF, DEFAULT_DATABASE=[BSA]; 
GO 

2 - [BSA] 데이터베이스로 전환하고 사용자를 만듭니다. 이 예제에서 스키마를 기본값으로 설정하고 [DBO]로 위의 로그인에 매핑하도록합니다.

-- Which database to use. 
USE [BSA] 
GO 

-- Delete existing user. 
IF EXISTS (SELECT * FROM sys.database_principals WHERE name = N'BSA_ADMIN') 
DROP USER [BSA_ADMIN] 
GO 

-- Add new user. 
CREATE USER [BSA_ADMIN] FOR LOGIN [BSA_ADMIN] WITH DEFAULT_SCHEMA=[DBO] 
GO 

3 - 그런 다음 역할을 만들고 역할에 사용자를 추가하십시오. 이 예에서는 사용자가 db_owner에 추가됩니다.

-- Which database to use. 
USE [BSA] 
GO 

-- Add to database owner role 
EXEC sp_addrolemember 'db_owner', 'BSA_ADMIN' 
GO 

로그인이 [마스터]로 기본 설정되어 있기 때문에 오류가 표시 될 수 있습니다. 이것은 종종 새로운 DBA에게 발생합니다.

4 - 선택적으로 사용자 지정 역할을 만들고 스키마의 소유권 역할을 부여 할 수 있습니다.

아래의 코드는 내가하는 프레젠테이션을위한 것입니다. 환경에 필요한 변경 만하십시오.

-- Make sure we are in autos 
USE [AUTOS] 
GO 

-- Delete existing role. 
IF EXISTS (SELECT * FROM sys.database_principals 
    WHERE type_desc = 'DATABASE_ROLE' AND name = 'AUTO_ROLE') 
    DROP ROLE [AUTO_ROLE] 
GO 

-- Create application role 
CREATE ROLE [AUTO_ROLE] AUTHORIZATION [dbo] 
GO 


-- Apply permissions to schemas 
GRANT ALTER ON SCHEMA::[ACTIVE] TO [AUTO_ROLE] 
GO 

GRANT CONTROL ON SCHEMA::[ACTIVE] TO [AUTO_ROLE] 
GO 

GRANT SELECT ON SCHEMA::[ACTIVE] TO [AUTO_ROLE] 
GO 

-- Ensure role membership is correct 
EXEC sp_addrolemember N'AUTO_ROLE', N'AUTO_USER' 
GO 
+0

아니요. 문제를 해결하지 못했습니다. 로그인을 사용하면 연결을 설정할 수 있지만 SP를 실행할 수 없습니다. 사용자의 경우 연결을 열 수 없습니다. – Gulshan

+0

SP에 역할의 권한을 명시 적으로 추가하십시오. 또한 SSMS를 통해 보안을 테스트하고 표준 보안을 통해 로그인하십시오. 새 쿼리 창을 열고 SP를 실행하십시오. –

0

마침내 어떻게 든 효과가 있습니다. 내 최종 쿼리는

USE [MyDB] 
GO 
CREATE LOGIN [SLogin] WITH PASSWORD=N'#####', DEFAULT_DATABASE=[MyDB], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF 

CREATE USER SUser FOR LOGIN [SLogin] 
WITH DEFAULT_SCHEMA = [MyDB] 

CREATE ROLE SUserRole AUTHORIZATION SUser 

GRANT SELECT, INSERT,EXEC, ALTER TO SurveyUserRole 

ALTER ROLE [SUserRole] ADD MEMBER [SUser] 

이다 그러나 나는 혼란 스러워요 ..

CREATE ROLE SUserRole AUTHORIZATION SUser 

역할을 만들고 또한 사용자에게이 역할을 할당하는데이 쿼리. 왜 사용자를이 역할에 다시 추가해야하는지.

아무도이 동작을 설명 할 수 있습니까?

+0

나는 보통 [dbo]를 남겨두고 sp_addrolemember, ADD MEMBER와 같은 것을 남겨 둡니다! –

관련 문제