CREATE DATABASE 및 CREATE ANY DATABASE 권한


21

Microsoft SQL Server에서 권한 CREATE DATABASECREATE ANY DATABASE권한 의 차이점은 무엇 입니까?

정식 답변을 찾을 수 없습니다. 내가 추측 할 수있는 최선 중 (a)는 점이다 CREATE ANY와 반면에 나는, 다른 사용자가 소유 할 수있는 데이터베이스를 만들 수 있습니다 의미 CREATE/ 초 SQL 서버 일이었다 I (b)는 사이베이스의 원래 허가를 할 수없는, 또는 CREATE ANYCREATE에 대한 별명이 ANSI 적합성.


Aaron이 말한 내용을 반향하여 +1하지만 편집 내용을 잘라 내고 답으로 붙여 넣은 다음 수락해야합니다. 두 가지 이유 : 답이 무엇인지를 명확하게하고 (그리고 편집 한 내용이 훌륭한 답입니다) 답이 더 깔끔합니다 (응답되지 않은 질문은 더 많은주의를 끌기 위해 종종 상단에 부딪히기도합니다).
Simon Righarts

1
완료했지만 내일까지는 수락 할 수 없었으며 어제 전혀 답변을 게시 할 수 없었습니다 (<100 담당자에 대한 자체 답변 5 시간 제한).
Tohuw

답변:


21

필자는이 기사에 제공된 표 ( http://msdn.microsoft.com/en-us/library/ms178569.aspx)의 도움을 받아 정식 답변을 찾았다 고 생각합니다 . CREATE DATABASE는 실제로 ANSI SQL 호환 권한 인 반면 CREATE ANY DATABASE는 MSSQL 독점 서버 권한입니다. 그러나 둘은 동일하지 않습니다. 사실, 둘 사이에는 다소 중요한 차이점이 있습니다.

둘 다 권한이지만 CREATE DATABASE는 현재 사용되는 데이터베이스의 보안 컨텍스트 만 참조하지만 CREATE ANY DATABASE는 SQL Server에서 로그인 목록을 조회 할 수 있습니다. ANSI SQL 서버에 대한 일반적인 기대는 일부 기본 시스템 데이터베이스에서 권한이 부여되고 해당 데이터베이스의 사용자에게 권한이 부여되기 때문에 구현 된 것으로 보입니다. 그런 다음 새 데이터베이스의 기본 동작은 마스터에게 문의하여 어떤 권한을 상속해야하는지 확인하는 것입니다. (SQL 101, 알고 있지만 실제로 여기에 예시되어 있습니다.)

따라서 CREATE DATABASE를 부여 할 때 실제로이 권한을 부여하려면 마스터에 사용자가 있어야합니다. 이것을 시도하면 작동합니다 (마스터에서 사용자 생성, 데이터베이스 생성 허용, 데이터베이스 생성 가능). 그러나 데이터베이스 작성 (또는 dbcreator 역할 부여)을 부여하면 master의 리터럴 사용자 일 필요는 없습니다.

두 권한의 차이점을 더 설명하기 위해 master와 다른 데이터베이스에 사용자 CREATE DATABASE를 부여하여 리턴 된 다른 메시지를 관찰 한 후 CREATE ANY DATABASE 권한에 대해 헹구고 반복하십시오.

use master; GRANT CREATE DATABASE to TestUser

메시지 15151, 수준 16, 상태 1, 줄 1 'TestUser'사용자가 없거나 권한이 없기 때문에 사용자를 찾을 수 없습니다.

이 오류는 TestUser 사용자가 아직 마스터 데이터베이스에 없기 때문에 발생합니다. 이것은 데이터베이스 수준의 권한입니다. 선택한 데이터베이스 외부로 이동하여 로그인 또는 사용자를 찾을 수있는 컨텍스트가 없습니다. master에서 사용자를 먼저 작성하면이 명령이 성공하고 CREATE ANY DATABASE가 부여 된 것처럼 데이터베이스를 작성할 수 있습니다.

use master; GRANT CREATE ANY DATABASE to TestUser

명령이 성공적으로 완료되었습니다.

독점적 인 Microsoft SQL Server 권한으로 CREATE ANY DATABASE가 현재 사용중인 데이터베이스의 사용자뿐만 아니라 SQL 인스턴스의 로그인 목록을 참조 할 수 있기 때문에 성공합니다.

use test; GRANT CREATE DATABASE to TestUser

메시지 15151, 수준 16, 상태 1, 줄 1 'TestUser'사용자가 없거나 권한이 없기 때문에 사용자를 찾을 수 없습니다.

이것은 첫 번째 예에 대한 설명의 일관성을 보여줍니다. 아래 쿼리와 결과 오류 메시지를 참고하십시오. 이 데이터베이스에서 사용자를 처음 작성하면이 오류 메시지가 표시되지 않습니다 (마지막 조회 참조).

use test; GRANT CREATE ANY DATABASE to TestUser

메시지 4621, 수준 16, 상태 10, 줄 1 서버 범위의 사용 권한은 현재 데이터베이스가 마스터 인 경우에만 부여 할 수 있습니다.

두 번째 쿼리에서 볼 수 있듯이 CREATE ANY DATABASE는 이미이 로그인 이름을 만든 로그인 목록을 참조합니다. 따라서 SQL Server는 사용자의 존재를 인정했지만 MSSQL에서는 허용되지 않는 master 이외의 서버 수준 권한을 부여하려고 시도하기 때문에 여전히 오류가 발생합니다.

use test; create user TestUser; grant create database to TestUser

CREATE DATABASE 권한은 마스터 데이터베이스에서만 부여 될 수 있습니다. 메시지 0, 수준 11, 상태 0, 줄 0 현재 명령에서 심각한 오류가 발생했습니다. 결과가 있으면 버려야합니다.

CREATE DATABASE에 적용 할 사용자가 있으므로 SQL Server가 이러한 권한을 저장하는 위치이므로 마스터 이외의 다른 서버 수준 권한을 부여 할 수 없다는 일반적인 오류 메시지가 나타납니다.

글쎄, 이것은 재미 있었다.

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