Ці підступні “кінцеві точки” в SQL Server, Інші СУБД, Бази даних, статті

Кілька разів стикалася з проблемою – в якийсь момент користувач втрачає право login-а в SQL Server. Ніяких видимих ​​причин – зміни прав, видалення login-а – а користувач отримує помилку “Login failed”.

У чому була причина, в тих випадках, про які йде мова …

Уявімо наступний сценарій:

1)      Ви створюєте нову кінцеву точку для TCP:

CREATE ENDPOINT tcp_endpoint

    STATE = STARTED

    AS TCP(LISTENER_PORT = 7022)

    FOR TSQL()

   GO

      При цьому ви отримуєте наступне попередження:

“Creation of a TSQL endpoint will result in the revocation of any “Public” connect permissions on the “TSQL Default TCP” endpoint.  If “Public” access is desired on this endpoint, reapply this permission using “GRANT CONNECT ON ENDPOINT::[TSQL Default TCP] to [public]”.”

Однак точка успішно створюється, так що попередження залишається поза увагою J

2)      Через якийсь час ви видаляєте недавно створену кінцеву точку:

 

DROP ENDPOINT tcp_endpoint

GO

 

І – сюрприз, сюрприз – у вас починаються проблеми з неможливістю залогуватися.

Що сталося …

За замовчуванням, в SQL Server існують кінцеві точки для всіх протоколів:
























Протокол

Ім’я кінцевої точки

Shared memory

TSQL LocalMachine

Named pipes

TSQL Named Pipes

TCP/IP

TSQL Default TCP

VIA

TSQL Default VIA

DAC

Dedicated Admin Connection

HTTP

HyperText Transport Protocol

 

За замовчуванням ж, серверна роль public (всі логіни належать цій ролі) має право коннектіться через ці кінцеві точки. Тобто, якщо користувач намагається з’єднатися з SQL Server, наприклад, протокол TCPIP, він буде з’єднуватися через кінцеву точку [TSQL Default TCP] І повинен мати відповідні права. Як я вже сказала, за замовчуванням він їх має, тому що належить серверної ролі public, яка, в свою чергу, має права з’єднуватися через дефолтні кінцеві точки.

Коли ви створюєте нову кінцеву точку для TCP протоколу, права public на дефолтну кінцеву точку відміняються, але, коли ви цю нову точку видаляєте, вони не повертаються (про що, власне, і говорить попередження, наведене вище). Таким чином, серверна роль public не має більше прав з’єднуватися, використовуючи протокол TCPIP.

Як розпізнати …

Errorlog буде містити помилку “Login failed”Зі статусом 11 або 12. Наприклад:

2009-05-22 18:33:25.78 Logon       Error: 18456, Severity: 14, State: 12.

2009-05-22 18:33:25.78 Logon       Login failed for user “lgn_valid”. Reason: Login-based server access validation failed with an infrastructure error. Check for previous errors. [CLIENT: …]

 

Наступний запит повертає список кінцевих точок, права з’єднуватися через які дані public:

 

Select sp.permission_name, sp.state_desc, ep.name

from sys.server_permissions sp join sys.endpoints ep

      on sp.major_id = ep.endpoint_id

where sp.grantee_principal_id = 2 and sp.class = 105

GO

 

У нашому прикладі результат буде таким:

 

CONNECT            GRANT                 TSQL Local Machine

CONNECT            GRANT                 TSQL Named Pipes

CONNECT            GRANT                 TSQL Default VIA

 

Як видно, протокол TCP відсутня в списку.

 

Як поправити …

 

Потрібно повернути права з’єднуватися через дану кінцеву точку серверної ролі public:

 

GRANT CONNECT ON ENDPOINT::[TSQL Default TCP] to public

GO

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*