powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Application Role
14 сообщений из 14, страница 1 из 1
Application Role
    #32064418
Господа, подскажите, пожалуйста, как использовать
Application Role?
Для чего она предназначена?
Может ли она быть владельцем таблиц?
Как дать пользователю эту, если это возможно?
Не понятно как установит соединение используя пароль этой роли - логина то нет...
В BOL не могу найти про это...
...
Рейтинг: 0 / 0
Application Role
    #32064426
Фотография Dmitri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
предназначена для ограничения доступа к объектам.
можно запретить доступ к обектам для пользователей базы и разрешить его только для approle, тогда работать с объектами базы можно будет только из приложения.
пользователю ее в явном виде дать нельзя.
из приложения ее можно активировать так
Код: plaintext
1.
2.
sp_setapprole [@rolename =] 'role' ,
    [@password =] {Encrypt N 'password'} | 'password'
    [,[@encrypt =] 'encrypt_style']
после этого, пока существует соединение, оно будет обладать правами approle
...
Рейтинг: 0 / 0
Application Role
    #32064432
Спасибо - стало намного яснее

Т.е. зная пароль, я могу активировать эту роль из приложения.
Нужно ли для этого обладать какими-то особыми правами?
Или активировать approle может любой пользователь?
Может ли быть approle владельцем таблиц и выполнять с ними запросы типа ALTER TABLE ?
Или CREATE TABLE [AppRoleName].[TableName]?
На что влияет параметр @encrypt ?
...
Рейтинг: 0 / 0
Application Role
    #32064436
Фотография Dmitri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
approle можно включить в роль dbo
никаких особых прав для активации роли не нужно, т.е. достаточно иметь доступ к базе
...
Рейтинг: 0 / 0
Application Role
    #32064438
Фотография Белов Владимир
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Процедуру
sp_setapprole имеет право выполнять любой пользователь.

Только учти один нюанс - одна база-одна роль.
Если нужно будет залезть в другую БД на этом же сервере, он залезет в неё с правами guest. То есть роль действительна только в своей БД.
@encrypt - шифровать ли пароль.
А зачем делать роль владельцем ? Для этого есть dbo. А способы доступа к информации - только через хранимые процедуры.
...
Рейтинг: 0 / 0
Application Role
    #32064463
mishgan2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>>Только учти один нюанс - одна база-одна роль.
Это не совсем так. Одна база - много ролей. Но в каждый конкретный момент может быть активна только одна роль.
--
Еще нужно учитывать такой факт - после вызова sp_setapprole теряются все привелегии, которые были у пользователя перед активацией роли.
...
Рейтинг: 0 / 0
Application Role
    #32064775
>А зачем делать роль владельцем ? Для этого есть dbo. А >способы доступа к информации - только через хранимые >процедуры.

Чтобы создавать объекты БД(таблицы, например) от имени dbo надо обладать привилегией на CREATE TABLE и DROP TABLE
Я боюсь, что любой маломальски грамотный юзер обладающий данной привилегией может удалить таблицу не только через мои хр.процедуры но и просто так. А это недопустимо.

А если я буду создавать таблицы, владельцем которых будет AppRole то и удалить злонамеренный юзер сможет только их.

А как потом вернуть те, старые, привилегии, которых лшился пользователь получив AppRole?
...
Рейтинг: 0 / 0
Application Role
    #32064790
mishgan2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>>А как потом вернуть те, старые, привилегии, которых
>>лшился пользователь получив AppRole?
...disconnect ... connect...
Я параллельно создаю дополнительную сессию, чтобы выполнить sp_addlogin, sp_droplogin, т.к. эти процедуры нельзя в принципе выполнить через application role. В этой сессии sp_setapprole не вызывается естественно.
...
Рейтинг: 0 / 0
Application Role
    #32064805
Ладно, с AppRole вроде понятно - еще поковыряюсь, будет еще понятнее.
Не понятно только - чтобы активировать роль в приложении необходимо знать пароль к ней. А где этот пароль хранить? Зашить в код - слишком топорно. Закриптовать и хранить в виде настройки - тоже проблем не оберешься.
Как лучше быть?

Может посоветует кто-нибудь - как лучше решить такую проблему - дать пользователю возможность создавать и удалять таблицы, но делать это только из моей программы.
...
Рейтинг: 0 / 0
Application Role
    #32064816
mishgan2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>>А где этот пароль хранить?
Тут я даже не знаю... Где не храни - всегда найдется умник, который его вычислит.
Лучше всего (ИМХО) активизировать роль из хранимой процедуры на сервере и пароль хранить в какой-нибудь табличке (зашифрованный естественно и никаких прав на эту таблицу никому не давать) и на клиента его не передавать. Но увы - вызов sp_set approle нельзя делать внутри другой хранимой процедуры.
У нас пока пароль жестко забит в коде. Понятно, что надо чего-то менять, но я не знаю что. Хранение его во внешнем файле или реестре с шифрованием всех проблем не решит.
...
Рейтинг: 0 / 0
Application Role
    #32064837
Вот и я о том же...
А почему нельзя setapprole вызывать из другой процедуры?
...
Рейтинг: 0 / 0
Application Role
    #32064843
mishgan2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>>А почему нельзя setapprole вызывать из другой процедуры?
Не знаю, так захотели разработчики Microsoft.
Вот код sp_setapprole (7.0.), оттуда все видно:

Код: plaintext
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.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
create procedure sp_setapprole
    @rolename   sysname,         -- name app role
 
    @password   sysname,		 -- password for app role
 
	@encrypt	varchar( 10 )	= 'none'	 -- Encryption style (%af_src_str_1 | %af_src_str_2)
 
as
     -- SETUP RUNTIME OPTIONS / DECLARE VARIABLES --
 
	set nocount on

     -- DISALLOW USER TRANSACTION --
 
	set implicit_transactions off
	if (@@trancount >  0 )
	begin
		raiserror( 15002 ,- 1 ,- 1 ,'sp_setapprole')
		return ( 1 )
	end

	 -- CHECK PARAMETER
 
	if (@rolename IS NULL)
    begin
        raiserror( 15431 ,- 1 ,- 1 )
        return ( 1 )
    end

	 -- VALIDATE ENCRYPTION
 
	declare @encrStyle int
	select @encrStyle = case lower(@encrypt) when 'none' then  0  when 'odbc' then  1  else null end
	if @encrStyle is null
	begin
        raiserror( 15600 ,- 1 ,- 1 ,'sp_setapprole')
        return ( 1 )
	end

     -- SP MUST BE CALLED AT ADHOC LEVEL --
 
    if (@@nestlevel >  1 )
    begin
        raiserror( 15422 ,- 1 ,- 1 )
        return ( 1 )
    end

     -- ACTIVATE APPROLE (THIS IS ONLY VALID FROM THIS SP!) --
 
    setuser @rolename, @password, @encrStyle

     -- RETURN SUCCESS/FAILURE --
 
    if (@@error <>  0 )
        return ( 1 )

	raiserror( 15494 ,- 1 ,- 1 ,@rolename)

    return ( 0 ) -- sp_setapprole
...
Рейтинг: 0 / 0
Application Role
    #32064849
А если это выкинуть?
Будет работать?
У меня пока время нет на проверку ... :(
-- SP MUST BE CALLED AT ADHOC LEVEL --
if (@@nestlevel > 1)
begin
raiserror(15422,-1,-1)
return (1)
end
...
Рейтинг: 0 / 0
Application Role
    #32064853
mishgan2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может и будет. Но я не проверял.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Application Role
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]