Điều này nghe có vẻ ngu ngốc nhưng tôi thấy nó thực sự khó hiểu: trong MSDN định nghĩa là thực thể có thể yêu cầu tài nguyên SQL Server. Và về cơ bản có ba loại hiệu trưởng: các hiệu trưởng cấp Windows, các hiệu trưởng cấp SQL Server và các hiệu trưởng cấp cơ sở dữ liệu. Cho đến nay nó là tốt. Chỉ khi nó cho tôi một ấn tượng rằng định danh của một hiệu trưởng nên khác với nguyên tắc khác, bất kể nguyên tắc này là gì. (Nếu tất cả các hiệu trưởng của ba loại này có thể được sắp xếp trong một bảng, chúng sẽ có số nhận dạng duy nhất)Làm thế nào để hiểu được các nguyên tắc trong SQL Server?
phần khó hiểu xuất phát từ ba câu hỏi dưới đây:
1)
Select name,principal_id from sys.database_principals
(Lưu ý: tôi chạy nó trên một cơ sở dữ liệu)
2)
Select name,principal_id from sys.server_principals
Bây giờ tôi biết người đầu tiên trả về các nguyên tắc người dùng cơ sở dữ liệu trong khi người thứ hai trả về hiệu trưởng của người dùng máy chủ (sửa tôi nếu tôi sai). Nhưng tại sao một hàng từ truy vấn đầu tiên có thể có cùng một principal_id như một từ truy vấn thứ hai? Ví dụ, một hàng từ gốc cơ sở dữ liệu sẽ là:
Tên: INFORMATION_SCHEMA, principal_id: 3
trong khi một hàng từ các truy vấn thứ hai là
Tên: sysadmin, principal_id: 3
Hai yếu tố này là gì? Như tôi đã đề cập, tôi nghĩ rằng số nhận dạng của hai hiệu trưởng sẽ khác nhau, ngay cả khi một là người dùng DB và người kia là người dùng máy chủ (và từ tên tôi giả sử principal_id là số nhận dạng). Vâng, nếu principal_id không phải là duy nhất cho tất cả các hiệu trưởng, nhưng chỉ duy nhất ở phạm vi của mỗi truy vấn (principal_id từ truy vấn đầu tiên chỉ là số nhận dạng cho người dùng cơ sở dữ liệu, vì vậy nó có thể giống với từ người dùng máy chủ), sau đó tôi có một truy vấn thứ ba và không hiểu nó nghĩa là gì:
3)
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
Nếu hai principal_id chỉ duy nhất trong phạm vi của họ, những gì nó có nghĩa là để làm cho một bên tham gia vào cả hai principal_id? Một tham gia bên trong có nghĩa là cột này là cùng độc đáo, phải không?
Phải có điều gì đó rất sơ cấp mà tôi hiểu lầm. Cảm ơn bạn đã giúp đỡ về điều đó!
Bạn lấy truy vấn thứ 3 từ đâu? –
@Damien_The_Unbeliever nhiều bài viết có bài viết tương tự. Giống như liên kết này: http://www.sql-server-performance.com/2009/analyzing-sql-server-permissions/ – tete
và bạn đã đọc một nhận xét trên bài viết đó - chỉ ra rằng việc tham gia vào principal_id là không chính xác, và SID đó nên được sử dụng thay thế? –