Người dùng không thể xem các bảng trong lược đồ không mặc định trong SSMS


10

Tôi gặp sự cố khi đặt VIEW DEFINITIONquyền một cách thích hợp ở cấp lược đồ cho một trong những người dùng của tôi. Tôi đã tạo lược đồ TestSchemavà thêm một số bảng. Người dùng hiện có quyền truy cập thiết lập để truy cập & sửa đổi bảng ( SELECT, UPDATE, DELETE, vv) thông qua dbo_datareaderdbo_datawritervai trò. Tuy nhiên, họ không thể thấy bất kỳ bảng nào trong trình thám hiểm đối tượng SSMS.

Tôi đã thử cấp quyền để xem định nghĩa:

grant view definition on SCHEMA :: [TestSchema] to [User]

Điều đó đã không làm việc. Tôi đã thử thiết lập quyền cấp bảng:

grant view definition on [TestSchema].[NewTable] to [User]

Điều đó cũng không hiệu quả. Sau đó, tôi đã cố gắng chỉ là một khoản trợ cấp chăn:

grant view definition to [User]

Và điều đó đã làm việc; bây giờ họ có thể thấy TestSchema, cũng như các lược đồ khác mà họ không nên truy cập.

Mục tiêu của tôi ở đây là cho phép người dùng xem tất cả các bảng trong một lược đồ nhất định. Làm thế nào để tôi thực hiện điều đó? Nếu tôi nên có thể làm điều này bằng cách mặc định, các quyền mà tôi nên được xem xét để tìm lý do tại sao tôi không thể?


Trong ví dụ 2008R2 của tôi khi tôi cấp db_datareader hoặc db_datawriter, họ có thể thấy tất cả các lược đồ. Tôi nhận ra rằng đó không phải là thứ bạn đang tìm kiếm nhưng điều đó có nghĩa là có sự khác biệt đáng kể giữa thiết lập của bạn và của tôi vì vậy tôi không thể thực sự kiểm tra nó. Là phiên bản hoàn toàn khác biệt hay có một số bảo mật khác đã được sửa đổi?
cfradenburg

@cfradenburg - Thật khó để nói; đây là một máy chủ được quản lý bởi CNTT, vì vậy tôi không chắc họ đã làm gì và tôi là người mới sử dụng SQL Server, vì vậy tôi không biết phải tìm gì. Tôi đoán một phần câu hỏi của tôi là, những quyền / vai trò / ??? Tôi có nên tìm kiếm để xác định xem điều này có thể được sửa chữa đơn giản bằng quyền không?
Eykanal

Người dùng có thể truy vấn các bảng? Nếu họ có thể truy vấn thì đó có thể chỉ là một vấn đề trong SSMS.
dùng9164

@ user9164 Có, người dùng có thể truy vấn các bảng; đó chỉ là vấn đề xem chúng trong SSMS.
Eykanal

Câu trả lời:


11

Câu trả lời ngắn: Không sử dụng db_datareaderhoặc db_datawritertừ chối tương đương của họ. Chúng chỉ dành cho khả năng tương thích ngược. Sử dụng chúng sẽ gây ra các vấn đề như những gì bạn đang phải đối mặt.

Nếu bạn muốn cấp cho Alice quyền chính quyền, CHỌN, CẬP NHẬT và XÓA cho tất cả các đối tượng có giá trị bảng trong lược đồ Bán hàng thì hãy sử dụng cách sau.

GRANT SELECT, INSERT, UPDATE, DELETE ON SCHEMA::Sales TO Alice ;

Nếu bạn muốn cấp cho Alice quyền chính quyền, CHỌN, CẬP NHẬT và XÓA cho tất cả các đối tượng có giá trị bảng trong tất cả các lược đồ thì hãy sử dụng cách sau.

GRANT SELECT, INSERT, UPDATE, DELETE TO Alice ;

Khả năng hiển thị siêu dữ liệu sau đó sẽ hoạt động chính xác.


Bạn có nguồn nào cho bit 'tương thích ngược' không? Tôi hiểu các lược đồ bị phản đối, nhưng tôi không thể tìm thấy bất cứ điều gì về vai trò.
Stijn

0

Hãy xem các hiệu trưởng khác có thể có sự từ chối ở đâu đó đang gây ra vấn đề. Hãy nhớ một từ chối sẽ luôn áp dụng trên đầu cấp. Và vì nó không phải là dịch vụ của bạn nên có thể có một cái gì đó trong tài khoản mà bộ phận CNTT đã thiết lập.

Sử dụng một cái gì đó như thế này cho cấp độ máy chủ:

    use master
    go
    SELECT a.*,b.name as 'Login ID' FROM sys.server_permissions as A inner join 
    sys.server_principals as B on a.grantee_principal_id = b.principal_id
    where b.name = 'login ID of the account'
    GO

Và một cái gì đó như thế này ở cấp cơ sở dữ liệu

SELECT a.*,b.name as 'Login ID' FROM sys.database_permissions as A 
inner join sys.server_principals as B on a.grantee_principal_id = b.principal_id
where b.name = 'test'
GO

Cảm ơn vì nhận xét, tôi sẽ thử nó khi tôi quay lại làm việc vào thứ Hai.
Eykanal

0

Điều này đã xảy ra với tôi khi tôi nâng cấp Máy chủ SQL của chúng tôi từ 2008R2 lên 2014. db_datareader hoặc db_datawriter hoặc các từ chối tương đương của chúng hoàn toàn hoạt động tốt trong 2008R2 nhưng chúng không hoạt động vào năm 2014.

Ví dụ để cấp quyền trong SQL Server 2014

Nếu bạn muốn cung cấp cho người dùng Alice các quyền CHỌN, CHERTN, CẬP NHẬT và XÓA cho tất cả các đối tượng có giá trị bảng trong lược đồ Bán hàng thì hãy sử dụng cách sau.

GRANT CHỌN, XÁC NHẬN, CẬP NHẬT, XÓA TRÊN SCHema :: Bán cho Alice; Nếu bạn muốn cấp cho Alice quyền chính quyền, CHỌN, CẬP NHẬT và XÓA cho tất cả các đối tượng có giá trị bảng trong tất cả các lược đồ thì hãy sử dụng cách sau.

GRANT CHỌN, XÁC NHẬN, CẬP NHẬT, XÓA CHO Alice; Khả năng hiển thị siêu dữ liệu sau đó sẽ hoạt động chính xác.

Tham khảo [Greenstone Walker].


1
Sundeep, hãy cố gắng giải thích một câu trả lời thay vì chỉ cung cấp một liên kết. Nếu bạn cần bất kỳ trợ giúp, hãy xem chuyến tham quan trang web
LowlyDBA
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.