Tại sao các quyền trùng lặp xuất hiện trên GUI bảo mật trong SSMS?


Câu trả lời:


11

Có nhiều mục vì bạn có thể được cấp cùng một quyền nhiều lần, từ các "người cấp" khác nhau. Nếu hiệu trưởng đó (tức là "người được cấp") đã được cấp quyền đó từ hai người cấp, thì bạn sẽ thấy ba mục cho cùng quyền đó trên màn hình này.

Đối với các mục "trùng lặp" mà bạn đang thấy, mục có cột "Nhà tài trợ" trống có thể được sử dụng để gán cùng một quyền từ một người cấp khác so với mục được liệt kê trong mục khác cho cùng quyền đó (trong trường hợp này là : dbo). Tất nhiên, tôi không chắc tại sao lại có thêm mục nhập khi bạn được kết nối với tư cách là hiệu trưởng đã được cấp phép cho những gì sẽ là cùng một người cấp vì bạn chỉ có thể có một hàng cho mỗi người cấp. Ví dụ: nếu bạn thay đổi tùy chọn "With Grant" thành "dbo", thì nó sẽ chỉ cập nhật mục nhập cho "Grantor" = "dbo". Tôi đoán GUI không kiểm tra kết nối để lọc ra các hàng trống khi có hàng "Nhà tài trợ" không trống cho cùng hiệu trưởng với kết nối. Sau đó một lần nữa,đó là ô "Grantor" là một hiệu trưởng thả xuống cho phép chọn một thứ được sử dụng trong ASmệnh đề của GRANTcâu lệnh, nhưng không phải vậy, nên có hàng trống có vẻ khó hiểu hơn thực tế.

Hãy thử làm như sau để thấy điều này trong hành động:

USE [tempdb];

CREATE USER [GrantPark] WITHOUT LOGIN;
CREATE USER [GrantWard] WITHOUT LOGIN;


CREATE TABLE dbo.MultiplePermissionsTest (Col1 INT);

SELECT dp.[permission_name], dp.state_desc, USER_NAME(dp.grantee_principal_id)
       AS [Grantee], USER_NAME(dp.grantor_principal_id) AS [Grantor]
FROM   sys.database_permissions dp
WHERE  OBJECT_NAME(dp.major_id) = N'MultiplePermissionsTest';


GRANT SELECT ON dbo.MultiplePermissionsTest TO [GrantPark] WITH GRANT OPTION;

SELECT dp.[permission_name], dp.state_desc, USER_NAME(dp.grantee_principal_id)
       AS [Grantee], USER_NAME(dp.grantor_principal_id) AS [Grantor]
FROM   sys.database_permissions dp
WHERE  OBJECT_NAME(dp.major_id) = N'MultiplePermissionsTest';


GRANT SELECT ON dbo.MultiplePermissionsTest TO [GrantWard];

SELECT dp.[permission_name], dp.state_desc, USER_NAME(dp.grantee_principal_id)
       AS [Grantee], USER_NAME(dp.grantor_principal_id) AS [Grantor]
FROM   sys.database_permissions dp
WHERE  OBJECT_NAME(dp.major_id) = N'MultiplePermissionsTest';


GRANT SELECT ON dbo.MultiplePermissionsTest TO [GrantWard] AS [GrantPark];

SELECT dp.[permission_name], dp.state_desc, USER_NAME(dp.grantee_principal_id)
       AS [Grantee], USER_NAME(dp.grantor_principal_id) AS [Grantor]
FROM   sys.database_permissions dp
WHERE  OBJECT_NAME(dp.major_id) = N'MultiplePermissionsTest';

Trả về:

permission_name    state_desc                 Grantee      Grantor
(no rows)


permission_name    state_desc                 Grantee      Grantor
SELECT             GRANT_WITH_GRANT_OPTION    GrantPark    dbo


permission_name    state_desc                 Grantee      Grantor
SELECT             GRANT_WITH_GRANT_OPTION    GrantPark    dbo
SELECT             GRANT                      GrantWard    dbo


permission_name    state_desc                 Grantee      Grantor
SELECT             GRANT_WITH_GRANT_OPTION    GrantPark    dbo
SELECT             GRANT                      GrantWard    dbo
SELECT             GRANT                      GrantWard    GrantPark

Bây giờ, đi đến SSMS và mở rộng thư mục "Cơ sở dữ liệu hệ thống", sau đó chuyển đến "tempdb", sau đó đến "Bảng". Nhấp chuột phải vào "dbo.Mult MônPermissionsTest" và đi đến "Thuộc tính", sau đó đến "Quyền" và chọn "GrantWard". Cuộn xuống một chút và bạn sẽ thấy 3 hàng cho "Chọn", mỗi hàng có một giá trị khác nhau cho "Nhà tài trợ": (trống) dbo, và GrantPark.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.