2012-02-20 17 views
5

tôi đang trải qua kịch bản được tạo ra bởi dự án Visual Studio Cơ sở dữ liệu của tôi và tôi thấy điều này:"Grant Connect on Endpoint as [sa]" làm gì?

GRANT CONNECT 
    ON ENDPOINT::[TSQL Default TCP] TO PUBLIC 
    AS [sa]; 

Tôi không biết những gì nó làm, nhưng có vẻ như để cấp quyền truy cập PUBLIC như SA (chỉ bằng nó như thế nào đọc).

Bất kỳ ai biết điều này thực sự làm gì? (Clearly it grants some access via an "ENDPOINT". Nhưng bằng tiếng Anh đơn giản, nó làm gì?)

Bằng cách đọc nó, nó nói với tôi rằng bất kỳ ai kết nối qua cổng TCP đều có thể chạy dưới dạng [sa]. (Tôi hy vọng điều đó không đúng, nhưng nếu có, tại sao Dự án DB của Visual Studio làm điều đó?)

Trả lời

4

Để 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' 
Các vấn đề liên quan