2009-04-23 6 views
1

개발자에게 사용자 또는 기능을 생성하는 옵션을주지 않고 개체에 대한 사용자 권한을 부여 할 수있는 권한을 개발자에게 부여 할 수있는 방법이 있습니까?개발자에게 권한을 부여하여 사용자에게 권한을 부여하는 방법은 무엇입니까?

개발자 권한을 제한하려고합니다. 개발자가 개발자 및 사용 환경에서의 사용 권한이 db_owner 인 것으로 나타났습니다. 그래서 나는이 광기를 막기 위해 최선을 다하고 있습니다.

이 문제에 관해 좋은 기사가 있습니까?

+0

가 저기 serverfault에 속한다 닫 투표는. com –

답변

2

마찬가지로 사용자가 사용 권한을 양도 할 수있는 경우 자체 또는 더미 계정에 사용 권한을 양도 할 수 있습니다. SQL Server에 "사용자에게 사용 권한을 줄이십시오"라는 트릭이 있는지 확실하지 않습니다.

내가하는 방법은 저장 프로 시저입니다.

특정 사용자에게 특정 권한 또는 권한 집합 (이러한 권한은 일반 사용자에게 허용됨)을 제공하는 저장 프로 시저를 만듭니다. 그런 다음 개발자가이 저장 프로 시저에 대한 액세스를 실행하도록합니다. 실제로 GRANT 명령의 제한된 버전을 생성하기 위해 저장 프로 시저를 사용하면서 GRANT 명령을 모두 그대로 유지합니다.

+0

좋은데, 나는 그 옵션에 대해 생각하지 않았다. 고마워요, 한번 시도해 볼게요. –

1

누군가 다른 사람에게 권한을 부여 할 수 있으면 자신이 원하는 것을 수행 할 수있는 권한을 부여 할 수도 있습니다. 그래서이게 무엇에 좋은가요? 아마도 당신의 상황을 이해하지 못합니다.

+0

그게 전부 맞지 않아. WITH GRANT는 SQL Server에서 이와 같은 작업을 수행하는 데 도움이됩니다. 내가 묻는 이유는, 내가 원하는 것을 성취 할 수있는 방법이 있기를 바라고 있습니다. –

3

스테판의 말처럼 그들이 뭔가를하고 싶은 경우에 그들이 할 일은 자신을 부여하기 때문에 당신은 그들에게 효과적으로 그들에게 모든 권한을 부여 할 권한을 부여를주고, 그들에게 "db_securityadmin"데이터베이스 역할

+0

이 작업을 수행 할 생각은 있지만 db_securityadmin에는 갖고 싶지 않은 권한이 있습니다. –

0

의 회원 수 그것을 할 권한.

개발자가 적을 고려하는 대신 개발자에게 데이터베이스 관리에 사용되는 두 번째 사용자 계정을 제공하는 것이 좋습니다. 적어도 개발 계정에는 개발자가 프로덕션에 대한 모든 권한을 부여하지 않는 것이 일반적입니다.

1

개체 소유자는 해당 개체에 대한 사용 권한을 부여 할 수 있습니다. 개발자가 CREATE TABLE 권한과 같은 권한을 부여 할 필요가 없다면 권한을 부여 할 개체의 소유권을 개발자에게 부여 할 수 있습니다. 저장 프로 시저와 같은 개체에 대한 권한을 설정

0

가에서 실행 GRANT "을 수행 할 수 있습니다에,.. 그러나

, 당신은 또한 로그인 및 사용자 수준에서 보안 권한을 부여 할 수 있습니다 당신은 확인해야 할 것이며, (실행과 같은) 액세스가 필요한 객체에 필요한 권한 만 부여하십시오. 다른 사용자의 가장을 사용하여 필요한 모든 권한을 부여하지 않고 코드를 실행하는 데 필요한 권한의 유효성을 검사 할 수있는 "EXECUTE AS"기능 사용을 고려하십시오 모든 기본 객체 (예 : 테이블)에 대한 권한 EXECUTE AS는 저장된 procs, 함수, 트리거 등에 추가 될 수 있습니다.

그는 다음과 같이 저장 프로 시저 내에서 코드를 작성합니다. 작성 프로 시저 dbo.MyProcedure 실행자와 함께 실행

이 경우 호출중인 모듈의 소유자를 가장합니다. 또한 SELF를 가장하거나 사용자가 모듈을 만들거나 변경하거나 imperonate CALLER를 사용하여 모듈이 현재 사용자의 권한을 가질 수있게하거나 또는 OWNER로 가장 할 수 있습니다. OR이라는 프로 시저 소유자가 ...'user_name'으로 가장하여 특정 사용자를 가장하거나 ... 'login_name'으로 가장하여 특정 로그인을 가장합니다.

대부분의 경우 저장된 procs에 EXECUTE 권한 만 부여하면 저장 프로 시저 내에서 참조되는 모든 객체에 권한이 부여됩니다.

이렇게하면 암시 적 권한을 부여 할 필요가 없습니다 (예 : 데이터 업데이트 또는 추가 procs 호출). 소유권 체인이이를 처리합니다. 특히 동적 SQL 또는 CREATE TABLE과 같은 보안 강화 작업을 작성해야하는 경우에 유용합니다. EXECUTE AS는이를 고려하기위한 편리한 도구입니다.

예는 이러한 모든 명확히 도울 수

(예 dbadb)

USE [마스터] PASSWORD 로그인 [NoPrivUser]을 만들 이동 데이터베이스 공용 액세스 NoPrivUser라는 사용자 만들기 = N을 'ABC5 %의'DEFAULT_DATABASE = dbadb] GO USE는 [DBAdb] USER를 만들 이동, CHECK_EXPIRATION가 = ON, CHECK_POLICY가 = [NoPrivUser] 닉네임 [NoPrivUser]

NOTE 이동 CREATE 필요 THIS PROCEDURE OF CREATOR OR 소유자 대상 데이터베이스 내의 테이블 권한.

DBAdb 이동 사용하지 않는 경우 (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID (N '[dbo] .MyTable') 및 (N'U ')를 입력하여 DBAdb 이동 프로 시저 dbo.MyProcedure를 실행하십시오.)는 MyTable 테이블 (INT PKid, 숯, 컬럼 (10))을 MyTable VALUES (1 INSERT INTO 작성 'ABCDEF')

가 dbo.MyProcedure TO NoPrivUser ON

GRANT 간부 가고; GO

- 데이터베이스 서버에 NoPrivUser로 로그인하고 다음을 실행하십시오.

사용

EXEC dbo.MyProcedure

(영향 1 행 (들)) 이제

새 테이블 동안이 NoPrivuser로 로그온에서 선택하려고 이동 dbadb.

다음과 같은 얻을 것이다 :

선택 *을 MyTable에서 이동

메시지 229, 수준 14, 상태 5, 줄 1 SELECT 권한이 개체 '을 MyTable', 데이터베이스 'DBAdb'에 거부 , 스키마 'dbo'.

NoPrivUser로 로그온 한 상태에서 Owner의 보안 컨텍스트에서 프로 시저 만 실행 했으므로 예상되는 작업입니다. NoPrivUser는 실제로 테이블을 읽을 수있는 권한이 없습니다. 행을 생성하고 삽입하는 절차 만 실행하면됩니다.

EXECUTE AS 절을 사용하면 저장 프로 시저가 개체 소유자의 컨텍스트에서 실행됩니다. 이 코드는 dbo.MyTable을 성공적으로 만들고 행을 성공적으로 삽입합니다. 이 예에서 사용자 "NoPrivUser"는 테이블을 수정하거나이 테이블의 데이터를 읽거나 수정할 수있는 권한이 없습니다. 이 절차의 컨텍스트 내에서 코딩 된이 특정 작업을 완료하는 데 필요한 권한 만 필요합니다.

이러한 권한을 영구적으로 할당하지 않고 높은 보안 권한이 필요한 작업을 수행 할 수있는이 저장 프로 시저를 만드는 방법은 매우 유용합니다.

0

db_owner 역할 중 가장 위험한 부분은 사용 권한에 대해 거부를 실행하면 역할 구성원이 해당 역할을 다시 부여 할 수 있다는 것입니다. 난 그냥 이것에 대해 읽기 시작했고 나는이

Create role db_ControlDatabase 

grant control to db_ControlDatabase 

deny backup database to db_ControleDatabase 

alter role db_ControlDatabase add member TestUser 

는 지금까지 내가 주제 TestUser 추가하거나 고정 데이터베이스 역할의 구성원을 제거 할 수있는없이 권한이있는 것으로 나타났습니다 테스트하고 있습니다. 당신은 등

Here, 백업 인증서 백업 마스터 키와 같은이 시점에서 무엇을해야 거부 할 수 있어야한다 거부 또는 부여 할 수있는 권한의 목록입니다

관련 문제