Tôi cần giới hạn quyền truy cập vào một người dùng cụ thể, nhưng họ vẫn cần có thể xem dữ liệu trong các bảng do dbo sở hữu.
Tôi đang cố gắng làm như sau:
- Các hàm lược đồ dbo như bình thường, có quyền truy cập vào mọi thứ
- lược đồ lược đồ 1 chỉ có quyền truy cập vào các đối tượng giản đồ1
- nếu chế độ xem lược đồ1 hoặc thủ tục được lưu trữ truy cập dữ liệu trong các bảng do dbo sở hữu, chuỗi quyền thích hợp
- user1 có quyền truy cập vào lược đồ1, và không có gì khác; ngoại trừ trong trường hợp số 3
Đây là những gì tôi đã thử:
- Tạo người dùng user1 được ánh xạ tới đăng nhập thử nghiệm bằng mật khẩu ngẫu nhiên
- Tạo một vài bảng trong lược đồ dbo với một số dữ liệu thử nghiệm trong đó
- Tạo lược đồ giản đồ1
- Đã tạo một lược đồ1.get_profiles chọn từ chế độ xem được gọi là lược đồ1.profiles truy cập dữ liệu trong dbo.people, dbo.taglinks và dbo.tags
Tuy nhiên, sử dụng câu lệnh sau trong khi đăng nhập với tên user1:
EXEC get_profiles 1
kết quả trong:
The SELECT permission was denied on the object 'tags', database 'schema_test', schema 'dbo'.
Tôi đã thử WITH EXECUTE AS OWNER
và không thể bắt đầu hiểu "chuỗi sở hữu" được cho là hoạt động như thế nào.
Tôi cũng đã thử
GRANT EXECUTE ON SCHEMA::schema1 TO user1
GRANT INSERT ON SCHEMA::schema1 TO user1
GRANT SELECT ON SCHEMA::schema1 TO user1
GRANT UPDATE ON SCHEMA::schema1 TO user1
GRANT VIEW DEFINITION ON SCHEMA::schema1 TO user1
nhưng tôi gặp lỗi sau (mặc dù là người dùng có quyền truy cập cấp dbo):
Cannot grant, deny, or revoke permissions to sa, dbo, entity owner, information_schema, sys, or yourself.
Điều tôi cần là user1 để có thể truy cập dữ liệu thông qua các thủ tục được lưu trữ mà tôi cung cấp và không có gì khác.
Ngoài ra, điều này dự định cuối cùng sẽ sống trên cơ sở dữ liệu SQL Azure hiện có, nhưng trước tiên tôi đang thử nghiệm cơ sở dữ liệu giả.