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

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

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

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

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

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

Может посоветует кто-нибудь - как лучше решить такую проблему - дать пользователю возможность создавать и удалять таблицы, но делать это только из моей программы.
...
Рейтинг: 0 / 0
05.11.2002, 10:08:49
    #32064816
mishgan2000
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Application Role
>>А где этот пароль хранить?
Тут я даже не знаю... Где не храни - всегда найдется умник, который его вычислит.
Лучше всего (ИМХО) активизировать роль из хранимой процедуры на сервере и пароль хранить в какой-нибудь табличке (зашифрованный естественно и никаких прав на эту таблицу никому не давать) и на клиента его не передавать. Но увы - вызов sp_set approle нельзя делать внутри другой хранимой процедуры.
У нас пока пароль жестко забит в коде. Понятно, что надо чего-то менять, но я не знаю что. Хранение его во внешнем файле или реестре с шифрованием всех проблем не решит.
...
Рейтинг: 0 / 0
05.11.2002, 10:34:49
    #32064837
Application Role
Вот и я о том же...
А почему нельзя setapprole вызывать из другой процедуры?
...
Рейтинг: 0 / 0
05.11.2002, 10:40:49
    #32064843
mishgan2000
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Application Role
>>А почему нельзя 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
05.11.2002, 10:46:25
    #32064849
Application Role
А если это выкинуть?
Будет работать?
У меня пока время нет на проверку ... :(
-- SP MUST BE CALLED AT ADHOC LEVEL --
if (@@nestlevel > 1)
begin
raiserror(15422,-1,-1)
return (1)
end
...
Рейтинг: 0 / 0
05.11.2002, 10:51:14
    #32064853
mishgan2000
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Application Role
Может и будет. Но я не проверял.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Application Role / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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