2012-02-20 1 views
5

я шел через скрипт, порожденного моим зрительным проектом студии базы данных, и я нашел это:Что делает «Grant Connect on Endpoint as [sa]» делать?

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

Я не знаю, что он делает, но это, кажется, предоставить доступ PUBLIC как SA (просто как это читает).

Кто-нибудь знает, что это на самом деле делает? (Clearly it grants some access via an "ENDPOINT".Но на простом английском языке, что он делает?)

Просто прочитав его, он говорит мне, что любой, кто подключается через порт TCP, может работать как [sa]. (Я надеюсь, что это неправильно, но если это так, то почему проект БД Visual Studio сделал это?)

ответ

4

Для начала GRANT неверна по одной очевидной причине: для получателя, имя использует имя [PUBLIC], но он должен быть [public]. В случае чувствительной к регистру установки имя не будет разрешено.

Теперь о вашем вопросе: часть AS [sa] относится к действию предоставления разрешения, оно не передается получателю. Он читает что-то вроде:

I, во имя [sa], предоставить привилегию подключения к [TSQL Default TCP] конечной точки к членам [public] группы.

В частности, он делает не означает, что грантополучатель (члены [public]) должны быть повышен до [sa]. Предоставление разрешения на подключение является необходимым, но недостаточно привилегированным для подключения к базе данных. Грантополучателю все же потребуется разрешение на доступ к базе данных (т. Е. Чтобы пользователь сопоставил свой логин в базе данных). Кроме того, предоставление разрешения на подключение к главному серверу [public] не эквивалентно созданию логина для BUILTIN\Everyone (или BUILTIN\ANONYMOUS LOGIN по этому вопросу ...) принципалов безопасности (или других built-in account) ... Другими словами, пользователь NT, у которого нет логина (явный или неявный через членство в группе NT) в SQL Server все равно не сможет подключиться к экземпляру.

В качестве примечания, выполнив следующий запрос на любой новой установке показывает, что разрешение на подключение к умолчанию T-SQL конечных точек уже предоставлено [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' 
Смежные вопросы