Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Nemoxur
Зарегистрирован: 30.04.2010 Сообщения: 49
|
Добавлено: Пт Фев 05, 2016 11:27 Заголовок сообщения: Проблема в правах |
|
|
Добрый день.
Версия Microsoft SQL Server 2012 Standard (64-bit)
Если на двух базах стоит
ALTER DATABASE [test] SET TRUSTWORTHY ON;
ALTER DATABASE [test1] SET TRUSTWORTHY ON;
Владельцы одинаковые
На ManagementStudio под пользователем ex всё работает, а с клиента БОСС-Кадровик под пользователем ex с ролью public пишет
The server principal "ex" is not able to access the database "test1" under the current security context.
State:08004,Native:916,Origin:[Microsoft][SQL Server Native Client 11.0][SQL Server]
Запрос
select top 1 full_name from test.dbo.card
union all
select top 1 full_name from test2.dbo.card;
Запрос не отрабатывает, подскажите, пожалуйста, в чем может быть проблема? |
|
Вернуться к началу |
|
|
RVV Большой шоколадный орден
Зарегистрирован: 14.01.2010 Сообщения: 449
|
Добавлено: Пт Фев 05, 2016 13:18 Заголовок сообщения: |
|
|
У вас test1, а в запросе test2? |
|
Вернуться к началу |
|
|
Mikhail
Зарегистрирован: 16.08.2012 Сообщения: 177 Откуда: Москва
|
Добавлено: Пт Фев 05, 2016 13:21 Заголовок сообщения: |
|
|
Nemoxur, добрый день.
Пользователь в БК работает из-под роли приложения (application role). Попробуйте в SSMS поднять роль приложения и затем выполнить тот же запрос.
Надо убедиться, что роль приложения, под которой Вы работаете в БК одной из тестовых БД, так же существует в другой БД, и, возможно, с тем же паролем.
Кстати, позвольте пользуясь случаем задать уважаемым читателям: где можно подсмотреть пароли, которые используются при создании ролей приложений средствами БК? |
|
Вернуться к началу |
|
|
Mikhail
Зарегистрирован: 16.08.2012 Сообщения: 177 Откуда: Москва
|
Добавлено: Пт Фев 05, 2016 13:31 Заголовок сообщения: |
|
|
Код: |
use [test]
--query:
select user_name(), suser_name();
--result:
dbo, mydomain\myuser
--query:
select top 1
full_name
from test.dbo.card
union all
select top 1
full_name
from test1.dbo.card
--result:
ФИО1
ФИО2
--query:
sp_setapprole 'test_app_role', 'Pa$$W0rD'
--query:
select user_name(), suser_name();
--result:
test_app_role, mydomain\myuser
--query:
select top 1
full_name
from test.dbo.card
union all
select top 1
full_name
from test1.dbo.card
--result:
Msg 916, Level 14, State 1, Line 1
The server principal "mydomain\myuser" is not able to access the database "test1" under the current security context.
|
Вот как-то так можно сымитировать Вашу ситуацию. |
|
Вернуться к началу |
|
|
Nemoxur
Зарегистрирован: 30.04.2010 Сообщения: 49
|
Добавлено: Пт Фев 05, 2016 14:03 Заголовок сообщения: |
|
|
У всех баз test, test1, test2 один владелец, у всех стоит TRUSTWORTHY ON
Это две, три базы данных БОСС-Кадровик
Запрос пробую под ролью приложения (application role) HR2_ADM
и там и там есть (application role) HR2_ADM а вот пароль как проверить, я не знаю... |
|
Вернуться к началу |
|
|
Mikhail
Зарегистрирован: 16.08.2012 Сообщения: 177 Откуда: Москва
|
Добавлено: Пт Фев 05, 2016 15:01 Заголовок сообщения: |
|
|
Nemoxur, скажите, а что возвращает функция "select user_name()" выполненная в клиенте БК? |
|
Вернуться к началу |
|
|
DUCKKK Большой шоколадный орден
Зарегистрирован: 16.09.2009 Сообщения: 1686
|
Добавлено: Пт Фев 05, 2016 15:03 Заголовок сообщения: |
|
|
"где можно подсмотреть пароли, которые используются при создании ролей приложений средствами БК?" - это о чём? |
|
Вернуться к началу |
|
|
Nemoxur
Зарегистрирован: 30.04.2010 Сообщения: 49
|
Добавлено: Пт Фев 05, 2016 15:23 Заголовок сообщения: |
|
|
Всем спасибо, разобрался.
Если работаешь например на базе TEST и хочешь получить данные из базы данных TEST1, то нужно в роль приложения добавить например таблицу card с правами просмотра в защищаемые объекты и иметь права доступа на саму таблицу card базы данных TEST1
Как-то так |
|
Вернуться к началу |
|
|
Mikhail
Зарегистрирован: 16.08.2012 Сообщения: 177 Откуда: Москва
|
Добавлено: Пт Фев 05, 2016 15:55 Заголовок сообщения: |
|
|
DUCKKK, добрый день.
При создании роли приложения внутри модуля "Администратор" выполняется команда:
Код: |
XApplRole Create, Role_Code_[''];
|
Это своего рода обертка для инструкции:
Код: |
SET @SQL = 'CREATE APPLICATION ROLE ' + quotename(@Role) + ' WITH PASSWORD = ' + quotename(@Pwd, '''') + ', DEFAULT_SCHEMA = ' + quotename(@Role)
|
Собственно, интересно было узнать какой использовался пароль для создания роли приложения.
Зачем? Да просто хотелось подменить строку при входе в модуль
Код: |
execute { XApplRole Activate, @@role_code; }
|
на
Код: |
exec sp_setapprole 'TEST_APP_ROLE', 'Pa$$W0rd', @fCreateCookie = true, @cookie = @cookie output;
|
чтобы затем используя значение @cookie выполнить возврат к исходному контекту безопасности. Это позволит проводить разные эксперименты
Не зная пароль от роли приложения сделать это непросто.
Например, при создании новой роли я могу увидеть новый пароль используя профайлер, а для уже созданных?
Сейчас открыл справку дизайнера для оператора xApplRole, в которой сказано:
"
Для переприсвоения текущих паролей ролей необходимо запустить скрипт на X-языке, содержащий совокупность операторов «xApplRole PWD, <name_app_role>;» для каждой роли. Скрипт должен запускать пользователь, входящий в роль db_owner для БД.
Результат выполнения.
Активизируется или создается роль приложения. В отличие от аналогичных серверных процедур, при использовании оператора «xApplRole» пароль в явном виде не указывается, что несомненно более предпочтительно с точки зрения безопасности системы.
"
Это значит не обязательно знать текущие пароли роли приложений, ведь их можно заменить на собсвенные, а затем используя подмену инструкций, описанную выше, изменять контекст безопасности пользователя в ходе одного сеанса? |
|
Вернуться к началу |
|
|
Nemoxur
Зарегистрирован: 30.04.2010 Сообщения: 49
|
Добавлено: Пт Фев 05, 2016 16:23 Заголовок сообщения: |
|
|
Я тоже хотел бы знать пароль, так как создаю новую базу для интеграции и что бы пользователи имели доступ к таблицам новой БД, мне необходимо создать роль приложения. Вопрос, с каким паролем создать роль приложения в новой бд? |
|
Вернуться к началу |
|
|
Mikhail
Зарегистрирован: 16.08.2012 Сообщения: 177 Откуда: Москва
|
Добавлено: Пт Фев 05, 2016 16:42 Заголовок сообщения: |
|
|
Уточнение к вышесказанному: посмотрел как работает инструкция:
Код: |
XApplRole PWD,role_code_[''];
|
и разочаровался - установить с её помощью известный мне пароль не удастся.
Присоединяюсь к просьбе поделиться информацией относительно хранения паролей ролей приложений.
Спасибо. |
|
Вернуться к началу |
|
|
Nemoxur
Зарегистрирован: 30.04.2010 Сообщения: 49
|
Добавлено: Пт Фев 05, 2016 16:47 Заголовок сообщения: |
|
|
Вопрос снимается, мне достаточно:
Код: | use MYDB
XApplRole Create, 'HR2_ADM';
return SQL_CODE; |
|
|
Вернуться к началу |
|
|
|