|
SQL 2019 меняется логин после выполнения CLR процедуры
|
|||
---|---|---|---|
#18+
добрый день, коллеги! подскажите, вдруг кто уже сталкивался с таким. Microsoft SQL Server 2019 (RTM-CU6) (KB4563110) - 15.0.4053.23 (X64) Jul 25 2020 11:26:55 Copyright (C) 2019 Microsoft Corporation Express Edition (64-bit) on Windows 10 Pro 10.0 <X64> (Build 18363: ) (Hypervisor) самый свежий что сейчас есть. соединяемся через SSMS, делаем запрос: SELECT SYSTEM_USER получаем - User1 далее вызываем CLR-процедуру в которой делается новое соединение с сервером, примерно так: SqlConnectionStringBuilder _Builder = new SqlConnectionStringBuilder(); _Builder.ApplicationName = "CLR"; _Builder.DataSource = GetServerName(ACurrConnection); _Builder.InitialCatalog = ACurrConnection.Database; _Builder.IntegratedSecurity = true; _Builder.Enlist = false; _Builder.PersistSecurityInfo = false; _Builder.ConnectTimeout = 10; SqlConnection _Con = new SqlConnection(_Builder.ToString()); _Con.Open(); return _Con; процедура ничего в базу не пишет, имперсонаций не делает, просто выполняет несколько запросов и возвращает управление. опять делаем запрос: SELECT SYSTEM_USER получаем - sa. ни на каких других серверах и версиях SQL от 2008 до 2017 ничего подобного не повторяется, всё проверил. Либо что-то сильно поменялось в SQL 2019 либо это какой-то косяк - прогуглил всё что мог - ничего подобного не нашёл. Может кто чего знает? Заранее признателен. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2020, 13:22 |
|
SQL 2019 меняется логин после выполнения CLR процедуры
|
|||
---|---|---|---|
#18+
Drunik, перед запуском вашей ХП покажите вывод: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2020, 14:52 |
|
SQL 2019 меняется логин после выполнения CLR процедуры
|
|||
---|---|---|---|
#18+
прикладываю ниже. проверил более внимательно на разных серверах и сам код CLR-процедуры. Выснилось, что на SQL Server 2017 (RTM-GDR) (KB4505224) логин после вызова этой же процедуры не меняется, а на Microsoft SQL Server 2017 (RTM-CU21) (KB4557397) меняется. На Microsoft SQL Server 2016 (SP2-CU11-GDR) (KB4535706) - меняется. На всех 2014-х версиях что были доступны не меняется. Процедура везде одинаковая. В самой процедуре вызывается другая sql-процедура которая делает WITH EXEC AS OWNER - это не доглядел, но после вызова процедуры контекст должен меняться на исходный - тогда бы не работало нигде. Вобщем что-то пока всё сложно, ковыряю дальше. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2020, 15:31 |
|
SQL 2019 меняется логин после выполнения CLR процедуры
|
|||
---|---|---|---|
#18+
Drunik, у вас в процедуре используется имперсонация: наличие токена с типом AUTHENTICATOR это доказывает Код: sql 1.
сделайте после вызова Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2020, 16:00 |
|
SQL 2019 меняется логин после выполнения CLR процедуры
|
|||
---|---|---|---|
#18+
felix_ff Drunik, у вас в процедуре используется имперсонация: наличие токена с типом AUTHENTICATOR это доказывает Код: sql 1.
сделайте после вызова Код: sql 1.
Я это и не отрицаю, только имперсонация делается на в самой CLR-процедуре, а в той sql-процедуре которую она вызывает. Тот же самый скрипт, выполненный на указанных выше версиях серверов отрабатывает нормально - имперсонации не происходит - результат запроса до и после вызова CLR-процедуры идентичен. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2020, 16:11 |
|
SQL 2019 меняется логин после выполнения CLR процедуры
|
|||
---|---|---|---|
#18+
приложил 2 картинки из профайлера - на 1-й видно создание нового коннекта из под CLR процедуры, потом выполнение хранимой процедуры, имперсонация, возрат к исходному состоянию после вызова. На 2-й картинке заканчивается выполнение CLR-процедуры и слудеющий запрос из SSMS сразу же выполняется от имени sa. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2020, 16:24 |
|
SQL 2019 меняется логин после выполнения CLR процедуры
|
|||
---|---|---|---|
#18+
2-я картинка ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2020, 16:24 |
|
SQL 2019 меняется логин после выполнения CLR процедуры
|
|||
---|---|---|---|
#18+
Drunik, похоже, что сборки разные. Посмотрите на исполняемые команды. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2020, 16:30 |
|
SQL 2019 меняется логин после выполнения CLR процедуры
|
|||
---|---|---|---|
#18+
убрал из процедуры, которая вызывается из под CLR процедуру строку WITH EXEC AS OWNER и всё, логин меняться перестал. Но я не понимаю что это такое. Мало ли что я указываю внутри процедуры - после выхода з неё всё должно восстанавливаться как было - почему это происходит на одних серверах и не происходит на других? Подозреваю нужно делать более чистый эксперимент - вызывать какую-то совсем пустую процедуру из под CLR с указанием в этой процедуре WITH EXEC AS OWNER и смотреть что будет. Вернусь с этой темой чуть позже. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2020, 16:40 |
|
SQL 2019 меняется логин после выполнения CLR процедуры
|
|||
---|---|---|---|
#18+
Drunik, у вас нерепрезентативно представлен набор данных по трассе, включите события: SecurityAudit:Audit Login Security Audit: Audit Logout Security Audit: Audit Database Principal Impersonation Event Security Audit: Audit Server Principal Impersonation Event Stored Procedures: RPC:Completed Stored Procedures: RPC:Starting Stored Procedures: SP:Completed Stored Procedures: SP:Starting Stored Procedures: SP:StmtCompleted TSQL: Exec Prepared SQL TSQL: SQL:Batch Completed TSQL: SQL:StmtStarting TSQL: SQL:StmtCompleted и для них колонки в порядке: SPID, ApplicationName, LoginName, ObjectName, TextData, Database ID, Transaction ID я у себя такой тест провел: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27.
Код: sql 1. 2. 3. 4. 5. 6.
это выполняется в контексте пользовательской сессии SQL LOGIN Код: sql 1. 2. 3. 4. 5. 6.
у меня на Microsoft SQL Server 2019 (RTM) - 15.0.2000.5 (X64) Sep 24 2019 13:48:23 Copyright (C) 2019 Microsoft Corporation Express Edition (64-bit) on Windows 10 Pro 10.0 <X64> (Build 18362: ) все нормально возвращается в контекст пользователя ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2020, 17:46 |
|
SQL 2019 меняется логин после выполнения CLR процедуры
|
|||
---|---|---|---|
#18+
felix_ff, сделал всё как вы написали - если хотите приложу картинки - но там не будет ничего нового - не хочу забивать эфир, даже событий имперсонации в профайлере не видно, хотя логин меняется. Поэкспериментировал с процедурой, которая вызывается из CLR и обнаружил что такую реакцию вызывает даже не WITH EXEC AS OWNER а REVERT ниже по коду этой процедуры - т.е. выглядел примерно так: ALTER PROCEDURE dbo.alsDisconnect WITH EXEC AS OWNER AS BEGIN EXEC AS CALLER .. REVERT стоит убрать из процедуры REVERT - и всё работает нормально. Продолжаю эксперименты. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2020, 18:32 |
|
|
start [/forum/topic.php?fid=46&fpage=50&tid=1685726]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
33ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
others: | 16ms |
total: | 152ms |
0 / 0 |