Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

SQLDMO [D7, MSSQL]


Alex_Sudakov ©   (2002-11-15 13:44:00) 

Господа, может кто сталкивался...Как-то очень странно работает метод Grant для таблицы. Попытки выполнить вот такой код:

var
Grant, Deny: integer;
DB, tbl: variant;
Const
Database="Northwind";
Role="Test_role";
Table="Table1"
...
Grant:= Permission;
Deny:= Grant xor 15;
DB:= srv.Databases.Item( Database );
tbl:= DB.Tables.Item( Table );
ClearPermissionOnTable(Table,Role,Database);
tbl.Grant( Grant, Role, null, true, null );
tbl.Deny( Deny , Role, null, true);

где Permission- одна из констант типа SQLDMOPriv_Select, srv - уже созданный и подключенный объект SQLDMO.SQLServer, приводят к совершенно не понятному результату. Доступ ставится так как хочет, может вообще противоположные значения поставить...
Подскажите, может я что-нить забыл прописать в коде? :(((


Alex_Sudakov   (2002-11-18 16:07:00) [1]

ок


3JIA9I CyKA   (2002-11-18 15:57:00) [2]

Да... Фигня получается.
Я щАз занят. Если проблема не отвалится, напиши - бум бороть.
8)
Удачи.


Alex_Sudakov   (2002-11-18 15:04:00) [3]

Должно вернутся число, описывающее привилегию пользователя.
То, что устанавливалось в первом примере.


3JIA9I CyKA   (2002-11-18 14:55:00) [4]

А что должно получиться?


Alex_Sudakov   (2002-11-18 14:48:00) [5]

Кстати, может ты мне еще и вот в этом поможешь :)


function GetPermissionOnTable( Table, Role, Database: string ): integer;
var
tbl: variant;
SQLObjectList: variant;
i: integer;
DB:Variant;
begin
Result:= 0;
DB:= srv.Databases.Item( Database);
tbl:= DB.Tables.Item( Table );
SQLObjectList:= tbl.ListUserPermissions(Role);
if SQLObjectList.Count<>0 then
for i:=1 to SQLObjectList.Count do
Result:= Result or SQLObjectList.Item( i ).PrivilegeType;
SQLObjectList:= null;
tbl:= null;
end;


Тоже как-то очень загадочно работает...:(


3JIA9I CyKA   (2002-11-18 13:53:00) [6]

8)


Alex_Sudakov   (2002-11-18 13:39:00) [7]

Спасибо большое. Значит у меня мозги кипят...:)))
ЗЫ Твой пример работает...:)


3JIA9I CyKA   (2002-11-18 13:26:00) [8]

0 ваще низя. Шлю.


Alex_Sudakov   (2002-11-18 13:24:00) [9]

если можно - пришли пример (может у меня мозги закипают? :)
15 xor 15=0, а вот 1 xor 15 будет 14, что собственно и надо... В grant - то что разрешено, а в deny - соответственно то запрещено... Так что вроде все верно...


3JIA9I CyKA   (2002-11-18 13:15:00) [10]

Ты не задумывался сколько будет
15 xor 15
?

И что выдаст
tbl.Deny(0 , Role, null, true)
?

8)


3JIA9I CyKA   (2002-11-18 13:12:00) [11]

А у маня всё нормально. Пример прислать?


Alex_Sudakov   (2002-11-18 13:06:00) [12]

Суть не в этом, тут и так все работает нормально... Вопрос в том, что я делаю Grant(15), а ставится все что угодно...:(


3JIA9I CyKA   (2002-11-18 12:39:00) [13]

Deny := (not Grant) and 47;
if Deny > 0 then tbl.Deny(Deny, Role, null, true);


Alex_Sudakov   (2002-11-18 12:02:00) [14]

Там не два состояния, а три. Grant, Deny и null. Вот и приходится так писать...


3JIA9I CyKA   (2002-11-18 11:52:00) [15]

>>Deny:= Grant xor 15;
Это нафиг!?


Alex_Sudakov   (2002-11-18 10:37:00) [16]

Господа, ну неужели никто не сталкивался?! :(


Alex_Sudakov   (2002-11-15 15:15:00) [17]

Великолепный ответ...:)


stone   (2002-11-15 13:52:00) [18]

че та знакомое у тебя имя


Наверх

Титульная страница Поиск, карта сайта Написать письмо