![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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]че та знакомое у тебя имя