Para empezar, el GRANT es incorrecto por una razón obvia: usa el nombre [PUBLIC]
para el beneficiario, pero debe ser [public]
. En una instalación sensible a mayúsculas y minúsculas, el nombre no se resolverá.
Ahora sobre su pregunta: la parte AS [sa]
es relevante para la acción de otorgar el permiso, no se transfiere al concesionario. Se dice algo así como:
I, en nombre de [sa]
, conceda el privilegio de conectarse a la [TSQL Default TCP]
punto final a los miembros del grupo [public]
.
En concreto, se hace no implica que el concesionario (los miembros de [public]
) son para ser elevado a [sa]
. Conceder permiso de conexión es un privilegio necesario pero no suficiente para conectarse a una base de datos. El concesionario aún requeriría el permiso para acceder a la base de datos (es decir, para tener un usuario asignado a su inicio de sesión en la base de datos). Además, otorgar permiso de conexión al principal del servidor [public]
no equivale a crear un inicio de sesión para BUILTIN\Everyone
(o BUILTIN\ANONYMOUS LOGIN
para el asunto ...) principios de seguridad (u otro built-in account) ... En otras palabras, un usuario NT que no tiene inicio de sesión (explícita o implícita a través de una membresía de grupo NT) en SQL Server aún no podrá conectarse a la instancia.
Como nota al margen, se ejecuta la siguiente consulta en cualquier instalación totalmente nueva, revela que el permiso para conectarse al punto final predeterminado de T-SQL que ya se concede a [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'