Để bắt đầu, GRANT không chính xác vì một lý do rõ ràng: nó sử dụng tên [PUBLIC]
cho người được cấp, nhưng nó phải là [public]
. Trong trường hợp cài đặt nhạy cảm, tên sẽ không giải quyết.
Bây giờ về câu hỏi của bạn: phần AS [sa]
có liên quan đến hành động cấp quyền, nó không chuyển giao cho người được cấp. Nó đọc cái gì đó như:
tôi, nhân danh [sa]
, cấp đặc quyền kết nối với các thiết bị đầu cuối [TSQL Default TCP]
cho các thành viên của nhóm [public]
.
Cụ thể, nó không ngụ ý rằng người được cấp (các thành viên của [public]
) sẽ được nâng lên [sa]
. Cấp quyền kết nối là một đặc quyền cần thiết nhưng không đủ để kết nối với cơ sở dữ liệu. Người được cấp quyền vẫn sẽ yêu cầu sự cho phép để truy cập cơ sở dữ liệu (ví dụ: để người dùng được ánh xạ tới thông tin đăng nhập của nó trong cơ sở dữ liệu). Ngoài ra, việc cấp quyền kết nối cho máy chủ [public]
không tương đương với việc tạo thông tin đăng nhập cho các số hiệu an toàn BUILTIN\Everyone
(hoặc BUILTIN\ANONYMOUS LOGIN
cho vấn đề ...) (hoặc khác built-in account) ... Nói cách khác, người dùng NT không có thông tin đăng nhập (rõ ràng hoặc ẩn thông qua một thành viên nhóm NT) trong SQL Server sẽ vẫn không thể kết nối với cá thể.
Là một mặt lưu ý, chạy truy vấn sau đây về bất kỳ thương hiệu cài đặt mới cho thấy rằng sự cho phép kết nối với mặc định T-SQL endpoint đã được cấp cho [public]
:
select s.name as grantee,
e.name as endpoint,
p.permission_name as permission,
p.state_desc as state_desc
from sys.server_permissions p
join sys.server_principals s on s.principal_id = p.grantee_principal_id
join sys.endpoints e on p.major_id = e.endpoint_id
where p.type='CO'
Nguồn
2012-02-20 23:28:17