|
|
|
Доступ к системным таблицам SQL Server отвечающих за права доступа к таблицам
|
|||
|---|---|---|---|
|
#18+
Работаю на VBA (Access) Нужем доступ к таблицам отвечающих за права доступа к таблицам баз данных, что-бы получить 1). табличное представление кому чего можно, а кому нельзя. 2). Подгрузить всё это дело в переменные, что-бы программа выдавала ошибку о доступе не в момент выполнения SELECT или UPDATE , а на момент выполнения переменной. Например IF IDArea = True Then ' можно Else ' низя End If Есть следующие таблицы сервера(по умолчанию) sysusers - описание юзеров syscolumns - Название столбцов таблиц баз данных syspermissions - собственно таблица, отвечающая за распределение прав. Создано след. представление SELECT TOP 100 PERCENT dbo.syscolumns.id AS IDTable, dbo.syscolumns.name AS NameTable, dbo.sysusers.name AS NameUser, dbo.syspermissions.actadd, dbo.syspermissions.actmod, dbo.syspermissions.seladd, dbo.syspermissions.selmod, dbo.syspermissions.updadd, dbo.syspermissions.updmod, dbo.syspermissions.refadd, dbo.syspermissions.refmod FROM dbo.syscolumns INNER JOIN dbo.syspermissions ON dbo.syscolumns.id = dbo.syspermissions.id INNER JOIN dbo.sysusers ON dbo.syspermissions.grantee = dbo.sysusers.gid WHERE (dbo.sysusers.status = 2) ORDER BY dbo.sysusers.name Где NameTable - имя столбца NameUser - имя юзера actmod ... refmod - собственно поля чего можно,а чего нельзя. собственно проблема вот в чём. столбцы actmod ... refmod - бинарные, и судя по всему пустые, хотя права к таблицам определенны Может они где в других таблицах, или я чего не так делаю. Подскажите пожалуйста как с этим разобратся. Нужно явный показ в стлбцах, например 0 , -1, NULL либо какое другое рецение на основе системных SQL таблиц. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2002, 09:10:57 |
|
||
|
Доступ к системным таблицам SQL Server отвечающих за права доступа к таблицам
|
|||
|---|---|---|---|
|
#18+
В табличке syspermissions нужные поля : id- ObjectID grantee- UserID actadd - Битовая установленных маска прав, (раскладку точно не помню, но легко выяснить экперементами) Остается сделать что-нибудь типа select o.Name,u.Name, case when actadd&1=1 then 1 else 0 end, --select case when actadd&2=2 then 1 else 0 end, --insert case when actadd&4=4 then 1 else 0 end, -- update case when actadd&8=8 then 1 else 0 end, -- delete case when actadd&32=32 then 1 else 0 end --Execute from syspermissions p inner join sysobjects o on o.id=p.id inner join sysusers u on u.uid=p.grantee Повторяю,что непосредственно значения маски для операций я мог перепутать.(давно это было...) Удачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2002, 10:43:13 |
|
||
|
Доступ к системным таблицам SQL Server отвечающих за права доступа к таблицам
|
|||
|---|---|---|---|
|
#18+
А sp_helprotect не подойдет для твоих целей? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2002, 10:47:42 |
|
||
|
Доступ к системным таблицам SQL Server отвечающих за права доступа к таблицам
|
|||
|---|---|---|---|
|
#18+
Tulkin actadd - может иметь 5 значений ? у меня в таблице только 32 и 1 причем первых гораздо больше. А где все остальные? и actmod ... refmod - роли не играют? Либо та функция каторую Вы написали как-то хитро обращается к этим столбцам? Если не сложно можно поподробней, я недавно на SQL подсел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2002, 11:10:02 |
|
||
|
Доступ к системным таблицам SQL Server отвечающих за права доступа к таблицам
|
|||
|---|---|---|---|
|
#18+
Tulkin Вроде разобрался actadd - отвечает за разрешение actmod - отвечает за удаление Цифры следующие 1--select 8--insert 2-- update 16-- delete Но когда ил начинаешь помечать вместе - они складываются например select и Insert выдаёт 9 соответственно Вопрос. 1).Как SQL сервер их преобразовывает обратно 2).и выдаёт то что выдает встроенная команда sp_helprotect ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2002, 13:00:49 |
|
||
|
Доступ к системным таблицам SQL Server отвечающих за права доступа к таблицам
|
|||
|---|---|---|---|
|
#18+
почитай про побитовые операции... & - И | - ИЛИ .... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2002, 14:34:13 |
|
||
|
|

start [/forum/topic.php?fid=46&gotonew=1&tid=1821465]: |
0ms |
get settings: |
7ms |
get forum list: |
21ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
52ms |
get topic data: |
11ms |
get first new msg: |
6ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 213ms |
| total: | 371ms |

| 0 / 0 |
