2010-12-14 3 views
1

인사말,SQL 사용자 만들기 및 사용 권한 제한

내 프로그램은 ADO.NET API를 사용하여 SQL 데이터베이스를 만들고 SQL 연결/트랜잭션을 조작합니다. 데이터베이스가 생성되면 'sa'자격 증명을 사용하여 서버에 연결합니다. 이것은 'sa'자격 증명을 사용하여 데이터베이스에 연결할 수있는 유일한 시간입니다. 이 초기 연결 중에 로그인과 사용자를 몇 개 만들어야합니다. 그러면 해당 사용자의 자격 증명이 사용됩니다. 이제 어떻게 로그인과 사용자를 만들 수 있는지 알지만 액세스가 제한되는 것 같습니다. 특히, 1 db 로그인과 데이터베이스에 대해 생성 된 모든 저장 프로 시저에 액세스 할 수있는 사용자를 생성해야합니다. 일종의 db admin과 비슷하지만 매우 제한적입니다 (저장된 procs 만). 그리고 두 번째 db login/user는 몇 개의 특정 저장된 procs에만 접근 할 수 있습니다. 어떤 포인터? 감사!

다음
+0

편집 된 게시물은 자세한 내용입니다. 내가 쓴 것이 명확하지 않은지 물어보십시오 :) – LaGrandMere

답변

1

)

당신이 필요로하는 모든 당신의 sa 사용자로이 프로 시저를 호출하는 것입니다. 두 번째 사용자의 경우 역할에 포함시킨 다음 2 개의 sprocs에 대한 권한을 거부했습니다. 많은 sprocs에 대한 사용 권한을 거부하고 일부 sprocs에만 사용 권한을 부여하는 경우 부여 할 각 개체에 대해 두 번째 사용자를 역할에 포함시키지 않고 사용 권한을 개별적으로 부여하지 않는 것이 좋습니다. 이는 귀하에게 달려 있으며 귀하의 상황에 가장 적합한 방법입니다.


--Replace db with your database name 
USE db 

--Create a database role 
CREATE ROLE db_execonly 

--Grant EXEC permissions to the role 
GRANT EXECUTE TO db_execonly 

--Add users to the new role 
EXEC sp_addrolemember 'db_execonly', 'user1' 
EXEC sp_addrolemember 'db_execonly', 'user2' 

--Deny permissions to specific objects for user2 
DENY EXEC ON OBJECT::dbo.usp_sproc1 TO user2 
DENY EXEC ON OBJECT::dbo.usp_sproc2 TO user2 
+0

고마워, 브라이언. 두 솔루션 모두를 가지고 노는 것이 더 우아 해 보입니다. 나는 그것을 테스트하고 결과를 게시 할 것이다. – kateroh

1

당신은 사용자에게 모든 저장 프로 시저에 대한 액세스 권한을 부여하는 저장 프로 시저를 찾을 수 있습니다

MS SQL Tips

간부 인 수있는 권한이 필요 사용자와 그것을 호출하는 것입니다 당신이해야 할 모든 모든 저장 프로 시저를 매개 변수로 사용합니다. 저장 프로 시저에 대한 액세스를 허용하는 데 사용되는 GRANT를 볼 수있는이 스크립트에서

은 다음과 같습니다

GRANT EXEC ON ' + '[' + @OwnerName + ']' + '.' + '[' + @ObjectName + ']' + ' TO ' + @user 

편집 : 그것이

CREATE PROCEDURE spGrantExectoAllStoredProcs @user sysname 
AS 

/*---------------------------------------------------------------------------- 
-- Object Name: spGrantExectoAllStoredProcs 
-- Author: Edgewood Solutions 
-- Development Date: 03.19.2007 
-- Called By: TBD 
-- Description: Issue GRANT EXEC statement for all stored procedures 
-- based on the user name that is passed in to this stored procedure 
-- Project: SQL Server Security 
-- Database: User defined databases 
-- Business Process: SQL Server Security 
-- 
---------------------------------------------------------------------------- 
-- Num | CRF ID | Date Modified | Developer | Description 
---------------------------------------------------------------------------- 
-- 001 | N\A  | 03.15.2007 | Edgewood | Original code for the GRANT 
-- EXEC process 
-- 
-- 
*/ 

SET NOCOUNT ON 

-- 1 - Variable declarations 
DECLARE @CMD1 varchar(8000) 
DECLARE @MAXOID int 
DECLARE @OwnerName varchar(128) 
DECLARE @ObjectName varchar(128) 

-- 2 - Create temporary table 
CREATE TABLE #StoredProcedures 
(OID int IDENTITY (1,1), 
StoredProcOwner varchar(128) NOT NULL, 
StoredProcName varchar(128) NOT NULL) 

-- 3 - Populate temporary table 
INSERT INTO #StoredProcedures (StoredProcOwner, StoredProcName) 
SELECT ROUTINE_SCHEMA, ROUTINE_NAME 
FROM INFORMATION_SCHEMA.ROUTINES 
WHERE ROUTINE_NAME NOT LIKE 'dt_%' 
AND ROUTINE_TYPE = 'PROCEDURE' 

-- 4 - Capture the @MAXOID value 
SELECT @MAXOID = MAX(OID) FROM #StoredProcedures 

-- 5 - WHILE loop 
WHILE @MAXOID > 0 
BEGIN 

-- 6 - Initialize the variables 
SELECT @OwnerName = StoredProcOwner, 
@ObjectName = StoredProcName 
FROM #StoredProcedures 
WHERE OID = @MAXOID 

-- 7 - Build the string 
SELECT @CMD1 = 'GRANT EXEC ON ' + '[' + @OwnerName + ']' + '.' + '[' + @ObjectName + ']' + ' TO ' + @user 

-- 8 - Execute the string 
-- SELECT @CMD1 
EXEC(@CMD1) 

-- 9 - Decrement @MAXOID 
SET @MAXOID = @MAXOID - 1 
END 

-- 10 - Drop the temporary table 
DROP TABLE #StoredProcedures 

SET NOCOUNT OFF 
GO 

다음의 링크에서 저장 프로 시저를 붙여 . 나는 데이터베이스 역할을 생성 한 다음에 사용자를 추가 할 수

+0

팁 주셔서 감사합니다. 이 방식으로 데이터베이스에 저장된 모든 procs에 EXEC을 부여 할 수 있어야합니다. – kateroh

+0

@kateroh : 그것은 링크에서 주어진 저장 프로 시저가하는 것입니다. :) 그러나 길기 때문에 붙여 넣기를 원하지 않았습니다. 좋아, 내 게시물을 붙여 넣어 편집합니다. 나는 SQL Server 2005 버전을 사용합니다. 그렇지 않은 경우 링크로 이동하십시오. – LaGrandMere

+0

@LaGandMere : 답변 해 주셔서 감사합니다. 새로운 저장 프로 시저가 추가 될 때마다이 코드를 모든 사용자에게 다시 실행시켜야합니다. 그리 좋지는 않습니다. Isran은 '실행'권한 만 더 부여 된 db 역할을 가진 솔루션을 제안하지 않습니다 (아래 Brian 제안)? 그의 접근 방식에는 단점이 있습니까? 감사! – kateroh