2012-02-20 18 views
5

yo estaba pasando por la secuencia de comandos generada por mi proyecto de Visual Studio base de datos y encontré esto:¿Qué hace "Grant Connect on Endpoint as [sa]" do?

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

no sé lo que hace, pero parece conceder el acceso público como SA (simplemente por la forma en que lee).

¿Alguien sabe lo que realmente hace? (Clearly it grants some access via an "ENDPOINT". Pero en inglés claro, ¿qué hace?)

Con solo leerlo, me dice que cualquier persona que se conecte mediante un puerto TCP puede funcionar como [sa]. (Espero que no sea correcto, pero si lo es, ¿por qué DB Studio de Visual Studio lo haría?)

Respuesta

4

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'