DDL_admin 및 db_owner 권한


15

서버 팜에서 모든 데이터베이스 사용자의 권한을 제거하고 제한하는 프로젝트를 맡았습니다. (즐거운 시간)

현재 제한되는 권한 중 하나는 db_owner 권한입니다.
이 권한은 사례별로 검토되고 있지만 일반적인 변경 사항은 db_owner 권한을 다음으로 바꾸는 것입니다.

(고객에게 알리기 위해) 둘 사이의 정확한 차이점을 정의하고 싶습니다.
그러나 내가 알 수있는 한, 둘 사이의 차이점은 다음과 같아야합니다.

  • db_accessadmin 권한
  • db_backupoperator 권한
  • db_securityadmin 권한

그래서 효과가 잃게 :
[ALTER ANY USER]
[CREATE SCHEMA]
[BACKUP DATABASE], [BACKUP LOG], [CHECKPOINT]
[ALTER ANY APPLICATION ROLE],[ALTER ANY ROLE]
[DROP DATABASE]

db_owner가 위의 네 가지 역할로 대체되면 사용자가 느슨하게 할 다른 것이 있습니까?
이것이 실제로 많은 목적의 보안을 제공합니까?

답변:


16

db_ddladmin 및 db_owner

내가 테스트하고 읽은 내용에서 알 수있는 것에서 대부분 db_ddladminDOES가 허용하지 않는 한 목록이 정확 해 보입니다 CREATE SCHEMA. 나열된 다른 보안 권한이 실제로 거부되었음을 확인했습니다.

DDLADMIN 만 거부 됨 :

[ALTER ANY USER]

[BACKUP DATABASE], [BACKUP LOG],[CHECKPOINT]

[ALTER ANY APPLICATION ROLE], [ALTER ANY ROLE]

[DROP DATABASE]

그 지적. . .

  1. db_datareaderSELECT모든 테이블에 대한 액세스를 허용 합니다
  2. db_datarwriter, 및 모든 테이블에 대한 액세스를 허용합니다 INSERT.UPDATEDELETE
  3. db_executorEXECUTE모든 실행 가능한 개체에 대한 액세스를 허용 합니다

또한 db_ddladmin 역할 권한이 있다는 의미 일 수 있습니다. . .

참고 : 2005-2014 년에 SQL Server 버전이 매우 다양하므로 처음에는 소수의 사용자 만 테스트하여 꼬임 등을 제거하기 위해 비명을 지르는 사람을 확인하는 것이 가장 좋습니다.

  • 이 역할로 소유 한 객체는 DBO가 소유하지 않으므로이 수준의 무언가에 문제가있는 경우 소유권 변경 문제를 처리해야 할 수도 있습니다. 나는 이것이 문제가 될 것이라고 100 % 확신하지는 않지만 단지 경우를 언급 할 가치가 있습니다.

    출처 : 소유권 체인

  • 이 역할을 사용하면 (SQL Server 버전에 따라 다를 수 있음) 현재 DB에 정의 된 SQL 보안 원칙을 여전히 소유 한 개체에 추가 할 수 있으며 모든 개체 (소유하지 않은 개체 ) 는 물론 새로운 서버를 추가 할 수 있습니다 -레벨은 보안 수준을 DB 레벨로 정의했습니다.


또한 DBO 역할 권한이 없다는 의미 일 수 있습니다. . .

참고 : 2005-2014 년에 SQL Server 버전이 매우 다양하므로 처음에는 소수의 사용자 만 테스트하여 꼬임 등을 제거하기 위해 비명을 지르는 사람을 확인하는 것이 가장 좋습니다.

  • DBO 역할이 없으면 특정 SSMS 디자이너 GUI 인터페이스 (SQL Server 버전 변경) 가 T-SQL 작업을 통해 수행되고 권한이있는 경우에도 오류없이 (예 : GUI를 통해 테이블 ​​또는 열을 수정하는 경우) 채워 지지 않거나 열리지 않을 수 있습니다. . 일부 버전의 SQL Server GRANT VIEW DEFINITION에서는 이것이 문제가되는 곳 을 허용 하여 해결할 수 있으며 특정 버전의 SQL Server에서만 경고가 될 수도 있습니다.

    자원

    • 데이터베이스 소유자 또는 db_owner 역할의 구성원 인 사용자로 로그인하지 않았습니다. 소유하지 않은 테이블에는 변경 사항을 저장할 수 없습니다.

    • db_ddladmin 역할은 SSMS에서 "디자인"기능을 사용할 수 없습니다

      "우리는 가능한 한 QA 데이터베이스에 사용자 / 개발자에게 dbo를 제공하는 것을 막으려 고 노력합니다. 이것의 문제점 중 하나는 사용자 테이블과 같은 데이터베이스 오브젝트를 작성하고 수정할 수 있어야한다는 것입니다. MS SQL은 이런 종류의 작업을 위해 GUI (SSMS)를 고수하는 경향이 있는데 문제는 db_ddladmin (dbo가 아님)을 부여하고 더 이상 테이블 디자이너 GUI를 통해 테이블이나 열을 수정할 수 없을 때 발생합니다. TSQL 명령과 구문을 배우거나 (다시 필요하지 않을 수도 있음) 다른 활동에서 시간이 걸리는 DBA 팀에 참여하려면 추가 시간이 필요합니다.

      이것이 버그인지 또는 기능 요청인지는 모르지만 사용자가 TSQL을 통해 테이블을 변경할 수있는 충분한 권한을 가지고 있기 때문에 버그라고 생각하지만 GUI는 다음과 같은 메시지를 표시합니다.

      " 데이터베이스 소유자 또는 시스템 관리자로 로그온하지 않았습니다. 소유하지 않은 테이블에 변경 사항을 저장하지 못할 수 있습니다." AND "테이블 [schema].[table]이 읽기 전용으로 설정되어 있으며 사용자에게이 테이블에 대한 권한이 없습니다. "

      추적은 실제로 객체를 수정할 수있는 권한이 있더라도 db_ddladmin의 멤버를 배제하는 is_member ( 'db_owner') 확인을 가리키는 것으로 보입니다. Microsoft SQL Server Management Studio "


      에이전트 DBA에 의해 2010 년 1 월 5 일 오전 7시 06 분에 게시 됨

      비슷한 문제가 있었고 다음 보조금을 수행하여 문제를 해결할 수있었습니다.

      GRANT view definition on schema:: <schemaname> to <username>

다른 고려 사항

사례별로 검토 중이라고 말 했으므로

현재 제한되는 권한 중 하나는 db_owner 권한입니다.

이 권한은 사례별로 검토되고 있지만 일반적인 변경 사항은 db_owner 권한을 다음으로 바꾸는 것입니다.

  • db_datareader
  • db_datawriter
  • db_ddladmin
  • db_executor

db_ddladminDB 레벨 오브젝트에 실제로 필요한 것보다 더 많은 역할을 부여하므로 역할을 부여하는 대신 각 사용자에게 필요한 "모든 오브젝트"DB 레벨 액세스에 대한 추가 사용자 정의 역할 작성을 고려 했습니까?

나는 보통 그들이 필요로하는 것을 정확하게하고 그들의 일을하기 위해 더 이상 아무것도하지 않으며, DB의 모든 객체에 대한 DB 수준의 객체 접근에 "일반적인"또는 "표준적인"필요가 있다면, 다음과 같은 커스텀 DB 역할을 생성합니다. db_executor하지만 아래 예를 참조하십시오. 이렇게하면 보안을 위해 DB에 명시적인 객체 수준을 얻지 못하는 경우 사람들에게 특정 DB의 모든 DB 객체에 실제로 필요한 것을 부여 할 수 있습니다.

----Custom Database Roles

/* CREATE A NEW ROLE  -- Execute to all stored procs including newly created ones*/
-- Database specific
CREATE ROLE db_All_StoredProc_Execute
GRANT EXECUTE TO db_All_StoredProc_Execute

/* CREATE A NEW ROLE  -- Alter to all stored procs including newly created ones*/
-- Database specific
CREATE ROLE db_All_StoredProc_Alter
GRANT ALTER ANY SCHEMA TO db_All_StoredProc_Alter

/* CREATE A NEW ROLE  -- View Definition to all stored procs including newly created ones*/
-- Database specific
CREATE ROLE db_All_StoredProc_View
GRANT VIEW DEFINITION TO db_All_StoredProc_View

/* CREATE A NEW ROLE - Any schema alter and create procedure permissions */
-- Database specific
CREATE ROLE db_All_CreateProc_AlterSchema
GRANT ALTER ANY SCHEMA TO db_All_CreateProc_AlterSchema
GRANT CREATE PROCEDURE TO db_All_CreateProc_AlterSchema
GO

/* CREATE A NEW ROLE - Any schema alter and create table permissions */
-- Database specific
CREATE ROLE db_All_CreateTable_AlterSchema
GRANT ALTER ANY SCHEMA TO db_All_CreateTable_AlterSchema
GRANT CREATE TABLE TO db_All_CreateTable_AlterSchema

/* CREATE A NEW ROLE - Any schema alter and create function permissions */
-- Database specific
CREATE ROLE db_All_CreateFunction_AlterSchema
GRANT ALTER ANY SCHEMA TO db_All_CreateFunction_AlterSchema
GRANT CREATE FUNCTION TO db_All_CreateFunction_AlterSchema

/* CREATE A NEW ROLE - Any schema alter and create aggregate permissions */
-- Database specific
CREATE ROLE db_All_CreateAggregate_AlterSchema
GRANT ALTER ANY SCHEMA TO db_All_CreateAggregate_AlterSchema
GRANT CREATE AGGREGATE TO db_All_CreateAggregate_AlterSchema

/* CREATE A NEW ROLE - Any schema alter and create view permissions */
-- Database specific
CREATE ROLE db_All_CreateView_AlterSchema
GRANT ALTER ANY SCHEMA TO db_All_CreateView_AlterSchema
GRANT CREATE VIEW TO db_All_CreateView_AlterSchema

/* CREATE A NEW ROLE - Any schema alter and create schema permissions */
-- Database specific
CREATE ROLE db_All_CreateSchema_AlterSchema
GRANT ALTER ANY SCHEMA TO db_All_CreateSchema_AlterSchema
GRANT CREATE SCHEMA TO db_All_CreateSchema_AlterSchema

나는 또한 당신이 명시 적으로 다르게 만드는 것이 생각 할 수있는 db_DDLAdmin_Restriction 역할 공유하기를 원해요 DENY것을 제한하는 db_ddladmin명시 적 당신이 그 (것)들에게이 역할을 부여 할 위치를 적어도 데시벨에이를 만들 수 있도록 액세스 권한을 부여을 설정하고 DENY실제 객체 유형을 등에 액세스 할 수 없도록하고 싶습니다.

예를 들어, 당신이 알고있는 경우가 확실히 저장 프로 시저 및 함수를 만들 수, 제외 수있는 것이다 DENY CREATE FUNCTION, DENY CREATE PROCEDURE, DENY ALTER ANY SCHEMA.

---Create ddladmin restriction custom DB role
DENY ALTER ANY ASSEMBLY                    TO db_DDLAdmin_Restriction
DENY ALTER ANY ASYMMETRIC KEY              TO db_DDLAdmin_Restriction
DENY ALTER ANY CERTIFICATE                 TO db_DDLAdmin_Restriction
DENY ALTER ANY CONTRACT                    TO db_DDLAdmin_Restriction
DENY ALTER ANY DATABASE DDL TRIGGER        TO db_DDLAdmin_Restriction
DENY ALTER ANY DATABASE EVENT NOTIFICATION TO db_DDLAdmin_Restriction
DENY ALTER ANY DATASPACE                   TO db_DDLAdmin_Restriction
DENY ALTER ANY FULLTEXT CATALOG            TO db_DDLAdmin_Restriction
DENY ALTER ANY MESSAGE TYPE                TO db_DDLAdmin_Restriction
DENY ALTER ANY REMOTE SERVICE BINDING      TO db_DDLAdmin_Restriction
DENY ALTER ANY ROUTE                       TO db_DDLAdmin_Restriction
DENY ALTER ANY SCHEMA                      TO db_DDLAdmin_Restriction
DENY ALTER ANY SERVICE                     TO db_DDLAdmin_Restriction
DENY ALTER ANY SYMMETRIC KEY               TO db_DDLAdmin_Restriction
DENY CHECKPOINT                            TO db_DDLAdmin_Restriction
DENY CREATE AGGREGATE                      TO db_DDLAdmin_Restriction
DENY CREATE DEFAULT                        TO db_DDLAdmin_Restriction
DENY CREATE FUNCTION                       TO db_DDLAdmin_Restriction
DENY CREATE PROCEDURE                      TO db_DDLAdmin_Restriction
DENY CREATE QUEUE                          TO db_DDLAdmin_Restriction
DENY CREATE RULE                           TO db_DDLAdmin_Restriction
DENY CREATE SYNONYM                        TO db_DDLAdmin_Restriction
DENY CREATE TABLE                          TO db_DDLAdmin_Restriction
DENY CREATE TYPE                           TO db_DDLAdmin_Restriction
DENY CREATE VIEW                           TO db_DDLAdmin_Restriction
DENY CREATE XML SCHEMA COLLECTION          TO db_DDLAdmin_Restriction
DENY REFERENCES                            TO db_DDLAdmin_Restriction
GO

8

모든 권한을 나열하기 위해 SQL 스크립트를 사용하여 각 사례마다 사용자를 작성했습니다.

EXECUTE AS USER = 'test_user'
SELECT 
    permission_name 
FROM fn_my_permissions(null, 'DATABASE')
ORDER BY subentity_name, permission_name
REVERT;

그런 다음 결과를 비교하고 주로 msdn의 문서와 함께 다음 목록으로 왔습니다 (특별히 언급되지 않은 인용 부호는 msdn 링크에서 가져옴).
아래는 dbo 권한을 잃어버린 사람들에게 정확히 무엇 을 잃어 버렸 는지 알려주는 데 사용 된 문서 중 일부입니다 .

바꾸다

소유권을 제외하고 특정 보안 개체의 속성을 변경하는 기능을 부여합니다. 범위에 부여되면 ALTER는 해당 범위 내에 포함 된 보안 가능 항목을 변경, 작성 또는 삭제하는 기능도 제공합니다. 예를 들어 스키마에 대한 ALTER 권한에는 스키마에서 객체를 생성, 변경 및 삭제하는 기능이 포함됩니다.

응용 프로그램 역할 변경
모든 데이터베이스 감사 변경
모든 역할 변경
모든 사용자

Database Securable의 개별 인스턴스를 작성, ALTER 또는 DROP하는 기능을 제공합니다. 예를 들어, ALTER ANY SCHEMA는 데이터베이스에서 스키마를 작성, 변경 또는 삭제하는 기능을 제공합니다.

응용 프로그램 역할 은 응용 프로그램을 사용자와 같은 고유 권한으로 실행할 수있게하는 데이터베이스 보안 주체입니다.

SQL Server 또는 SQL Server 데이터베이스의 인스턴스를 감사 하려면 시스템에서 발생하는 이벤트를 추적하고 로깅합니다. 데이터베이스 레벨 감사 스펙 오브젝트는 감사에 속합니다. 감사 당 SQL Server 데이터베이스 당 하나의 데이터베이스 감사 사양을 만들 수 있습니다.

데이터베이스 역할데이터베이스 의 사용 권한을 쉽게 관리하는 데 사용되며 SQL Server는 다른 보안 주체를 그룹화하는 보안 주체 인 여러 역할을 제공합니다. 이들은 Microsoft Windows 운영 체제의 그룹과 같습니다. 데이터베이스 수준 역할은 권한 범위에서 데이터베이스 전체에 적용됩니다.

인증
msdn에서 발견되었습니다.

AUTHENTICATE & AUTHENTICATE SERVER 권한은 데이터베이스 간 및 서버 액세스 (각각) 시나리오에서 EXECUTE AS를 사용할 때만 사용됩니다.

백업 데이터베이스
백업 로그

연결 복제

에 사용되는 데이터베이스 복제 권한.

제어

피부 여자에게 소유권과 유사한 기능을 부여합니다. 피부 여자는 보안 개체에 대해 정의 된 모든 권한을 효과적으로 갖습니다. CONTROL이 부여 된 보안 주체는 보안 개체에 대한 권한을 부여 할 수도 있습니다.

역할 만들기

피부 여자에게 데이터베이스 보안 개체를 만드는 기능을 부여합니다.

쇼 플란

실행 계획 권한은 Transact-SQL 일괄 처리와 함께 사용할 때 다양한 실행 계획 SET 문 옵션에 사용됩니다 .

구독 QUERY 알림

쿼리 알림에 대한 설명서

Service Broker 인프라를 기반으로하는 쿼리 알림을 통해 데이터가 변경 될 때 응용 프로그램에 알릴 수 있습니다. 이 기능은 웹 응용 프로그램과 같은 데이터베이스에서 정보 캐시를 제공하는 응용 프로그램에 특히 유용하며 소스 데이터가 변경 될 때 알려야합니다.

소유권을 가지십시오

피부 여자가 부여 된 보안 개체의 소유권을 가질 수 있도록합니다.

데이터베이스 상태보기

동적 관리 뷰 및 함수 (Transact-SQL) 를 보는 데 사용됩니다 .

정의보기

보기 정의 권한대한 설명서 .

VIEW DEFINITION 권한을 통해 사용자는 권한이 부여 된 보안 개체의 메타 데이터를 볼 수 있습니다. 그러나 VIEW DEFINITION 권한은 보안 성 자체에 대한 액세스 권한을 부여하지 않습니다. 예를 들어, 테이블에 대한 VIEW DEFINITION 권한 만 부여 된 사용자는 sys.objects 카탈로그 뷰에서 테이블과 관련된 메타 데이터를 볼 수 있습니다. 그러나 SELECT 또는 CONTROL과 같은 추가 권한이 없으면 사용자는 테이블에서 데이터를 읽을 수 없습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.