이것은 바보 같지만 실제로는 혼란 스럽습니다. MSDN에서 정의는 SQL Server 리소스를 요청할 수있는 엔터티입니다. 기본적으로 프린시 펄에는 세 가지 유형이 있습니다. Windows 수준의 주체, SQL Server 수준의 주체 및 데이터베이스 수준의 주체입니다. 지금까지는 괜찮습니다. 단지이 원리가 어떤 유형인지에 관계없이 한 교장의 식별자가 다른 교장의 식별자와 달라야한다는 인상을 준다. (이 세 가지 유형의 모든 교장이 하나의 테이블에 배열 될 수 있다면 그들은 고유 한 식별자를 가짐)SQL Server의 주체를 이해하는 방법?
1)
Select name,principal_id from sys.database_principals
(참고 : 나는 하나의 데이터베이스에서 실행)
2)
혼란스러운 부분은 아래 세 가지 쿼리에서 온다
Select name,principal_id from sys.server_principals
이제 데이터베이스 사용자 주체를 반환하는 반면, 두 번째 서버 사용자는 서버 사용자 주체를 반환합니다 (잘못된 경우 올바른 경우). 하지만 왜 첫 번째 쿼리의 한 행이 두 번째 쿼리의 한 행과 동일한 principal_id를 가질 수 있습니까? 예를 들어, 데이터베이스 주체에서 한 행은 다음과 같습니다
이름 : INFORMATION_SCHEMA, principal_id : 시스템 관리자, principal_id : 3 두 번째 쿼리에서 한 행은
이름 3
동안
이 두 principal_id는 무엇입니까? 앞에서 언급했듯이 두 사용자의 식별자는 DB 사용자이고 다른 사용자가 서버 사용자 (이름에서 principal_id가 식별자라고 가정)가 다를지라도 생각했습니다.
principal_id가 모든 주체에 대해 고유하지 않고 각 쿼리의 범위에서만 고유 한 경우 (첫 번째 쿼리의 principal_id는 데이터베이스 사용자의 식별자이므로 서버 사용자의 식별자와 동일 할 수 있습니다.), 그때는 무슨 뜻 세 번째 쿼리를 이해하지 않습니다
3) 두 principal_id 자신의 범위 내에서만 고유
SELECT
SDP.PRINCIPAL_ID AS [Principal ID],
SDP.NAME AS [Database UserName],
SDP.TYPE_DESC AS [Datebase UserType],
SSP.NAME AS [Server LoginName],
SSP.TYPE_DESC AS [Server LoginType]
FROM sys.database_principals SDP
INNER JOIN sys.server_principals SSP
ON SDP.PRINCIPAL_ID = SSP.PRINCIPAL_ID
경우, 내부를 만들기 위해 무엇을 의미 하는가 principal_id에 가입 하시겠습니까? 내부 조인은이 열이 공동으로 고유하다는 것을 의미합니다.
내가 오해 한 것은 아주 초보적인 것이 틀림 없습니다. 그것에 어떤 도움을 주셔서 감사합니다!
어디에서 3 번째 쿼리를 얻었습니까? –
@Damien_The_Unbeliever 많은 기사가 비슷한 기사가 있습니다. 이 링크처럼 : http://www.sql-server-performance.com/2009/analyzing-sql-server-permissions/ – tete
그리고 그 기사에있는 한 가지 주석을 읽었습니다 - principal_id에 합류하는 것이 잘못되었다는 것을 지적하고, 대신 SID를 사용해야합니까? –