Что делает «Предоставить подключение на конечной точке как [sa]»? - PullRequest
5 голосов
/ 21 февраля 2012

Я просматривал скрипт, сгенерированный моим проектом базы данных Visual Studio, и нашел это:

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

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

Кто-нибудь знает, что это на самом деле делает? ( Ясно, что он предоставляет некоторый доступ через "ENDPOINT" . Но на простом английском языке, что он делает?)

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

1 Ответ

4 голосов
/ 21 февраля 2012

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

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

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

В частности, не подразумевает, что грантополучатель (члены [public]) должен быть повышен до [sa]. Предоставление разрешения на подключение является необходимой, но недостаточной привилегией для подключения к базе данных. Получателю гранта все равно потребуется разрешение на доступ к базе данных (т. Е. Для сопоставления пользователя с его логином в базе данных). Кроме того, предоставление разрешения на подключение субъекту сервера [public] не эквивалентно созданию имени входа для участников безопасности BUILTIN\Everyone (или BUILTIN\ANONYMOUS LOGIN в этом случае ...) (или другой встроенной учетной записи * 1025). *) ... Другими словами, пользователь 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'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...