powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / RLS защита на уровне строк
21 сообщений из 21, страница 1 из 1
RLS защита на уровне строк
    #39759456
VRS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VRS
Гость
создал пользователя "readonly"
включил защиту на уровне строк
Код: sql
1.
ALTER TABLE importbanka enable ROW LEVEL SECURITY;


создал политику
Код: sql
1.
CREATE POLICY slct ON importbanka   USING  (contragentid =1 and current_user='readonly');



что еще надо сделать чтобы, пользователь "readonly" мог видеть только записи с contragentid =1.
Почему-то видит,изменяет записи.

стоит куча REVOKE. Ничего не помогает
Код: sql
1.
2.
3.
4.
5.
REVOKE ALL privileges ON importbanka FROM readonly;
REVOKE ALL PRIVILEGES ON ALL TABLES IN SCHEMA public FROM readonly;
REVOKE ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public FROM readonly;
REVOKE ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public FROM readonly;
REVOKE ALL PRIVILEGES ON SCHEMA public FROM readonly;
...
Рейтинг: 0 / 0
RLS защита на уровне строк
    #39759465
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VRS,

Вообще достаточно
Код: sql
1.
CREATE POLICY slct ON importbanka TO readonly USING  (contragentid =1);



Но если после revoke пользователь не ругается на permission denied for table importbanka - то проверьте сперва, тот ли это вообще хост, база и схема.
...
Рейтинг: 0 / 0
RLS защита на уровне строк
    #39759714
VRS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VRS
Гость
удалил. создаю по новой пользователя
Код: sql
1.
CREATE user readonly WITH PASSWORD 'xxx';



далее, даю доступ к объектам, на которые жалуется при подключении
Код: sql
1.
2.
3.
4.
5.
6.
GRANT CONNECT ON DATABASE postgres to readonly; 
grant select on pg_class, pg_type to readonly;
GRANT execute ON function nameeq TO readonly;
ALTER TABLE public.importbanka enable ROW LEVEL SECURITY;
create POLICY slct ON public.importbanka for select
  USING (contragentid = 1);



через клиента подключаю табл. importbanka
подключился, и все - никакие ограничения уже не работают!
даже удалил пользователя, а просмотр редактирование все равно доступны.

если пробовать переподключиться, тогда выдает ошибку
...
Рейтинг: 0 / 0
RLS защита на уровне строк
    #39759716
Павел Лузанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VRS,

Убедитесь, что именно под readonly подключаетесь клиентом (оч. похоже, что суперпользователем).
И покажите, что возвращают команды psql:
\du readonly
\dn+ public
\dp importbanka
\d importbanka
...
Рейтинг: 0 / 0
RLS защита на уровне строк
    #39759719
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VRS,

я тут мимокрокодил (руками не трогал), но для чистоты делал бы не в паблике, а в отдельной схеме. не грантуемой паблику.

а уж если в паблике -- то сначала отревочить паблик от паблика.
а то ваша банка как паблик может читать, например. ибо энибоди == паблик.
...
Рейтинг: 0 / 0
RLS защита на уровне строк
    #39761012
VRS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VRS
Гость
разобрался.
Клиентское приложение(Access)
Если подключиться к серверу через суперпользователя, удалить таблицу, затем переподключиться на пользователя readonly, то проблема остается.
Если выйти из клиента и потом войти под readonly, тогда все работает корректно.
То же самое и наоборот.
...
Рейтинг: 0 / 0
RLS защита на уровне строк
    #39761055
Павел Лузанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VRS,

Описанные симптомы говорят о том, что при "переподключении" в Access без выхода из клиента переподключение в postgresql не происходит.
Как был суперпользователь, так и остался.
...
Рейтинг: 0 / 0
RLS защита на уровне строк
    #39761196
VRS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VRS
Гость
Павел Лузанов,

Это я понял.
А вот как переподключиться не выходя, пока не нашел.
...
Рейтинг: 0 / 0
RLS защита на уровне строк
    #39762697
VRS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VRS
Гость
Павел ЛузановVRS,

Описанные симптомы говорят о том, что при "переподключении" в Access без выхода из клиента переподключение в postgresql не происходит.
Как был суперпользователь, так и остался.

Может кто подскажет, как переподключиться не выходя из клиента.
...
Рейтинг: 0 / 0
RLS защита на уровне строк
    #39762716
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VRS,

попробуйте спросить в форуме этого "Access"
...
Рейтинг: 0 / 0
RLS защита на уровне строк
    #39762866
VaRas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Melkij,
Написал. Там тоже не фонтан. Тишина
...
Рейтинг: 0 / 0
RLS защита на уровне строк
    #39762868
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VRSПавел ЛузановVRS,

Описанные симптомы говорят о том, что при "переподключении" в Access без выхода из клиента переподключение в postgresql не происходит.
Как был суперпользователь, так и остался.

Может кто подскажет, как переподключиться не выходя из клиента.
Таки да. Что логично - нужно использовать не MS Access, а клиента, который позволяет это делать. А Вы ждали другой ответ?
...
Рейтинг: 0 / 0
RLS защита на уровне строк
    #39762878
VRS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VRS
Гость
Andy_OLAP,

так хотел формы использовать Access, а данные в postgres.

думаю все же выход должен быть
...
Рейтинг: 0 / 0
RLS защита на уровне строк
    #39762884
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VRSAndy_OLAP,

так хотел формы использовать Access, а данные в postgres.

думаю все же выход должен быть
Для такого обрезанного пользователя, который должен видеть и редактировать только "свое" и ничего больше - написать PHP+Javascript. Можно PostgreSQL PHP Generator Lite , можно попробовать Lightweight Grid jQuery Plugin . Это позволит работать в браузере, а не на Windows + MS Office.
...
Рейтинг: 0 / 0
RLS защита на уровне строк
    #39762885
Павел Лузанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VRS,

Покажите как сейчас подключаетесь и как переподключаетесь.
Может и так понятно будет.

Какие-то функции типа connect, disconnect должны же быть?
...
Рейтинг: 0 / 0
RLS защита на уровне строк
    #39762957
VRS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VRS
Гость
Павел Лузанов,

Код: vbnet
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.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
Sub sbConn()
On Error GoTo lbl
Dim conn As ADODB.Connection
Dim RS As ADODB.Recordset
Dim rst As ADODB.Recordset
Dim strSql As String, serverConn As String
Dim i As Integer
  
  'строка подключения
  sConnString = "Driver={PostgreSQL Unicode}; Server=" & hostName _
    & "; PORT=" & portNo _
    & "; Database=" & baseName _
    & "; UID=" & userName _
    & "; PWD=" & psw
  
  Set conn = New ADODB.Connection
    
  conn.Open sConnString
  
  'если нет соединения, ... к метке Lbl
  If conn.State = 0 Then GoTo lbl
    
  Call PrisoedenitTablitsu(RS(0))

  lbl:
  If Err.Number <> 0 Then Debug.Print Err.Number, Err.Description
  
  If Not (RS Is Nothing) Then
    If RS.State = 1 Then RS.Close
    Set RS = Nothing
  End If
  
  If CBool(conn.State And adStateOpen) Then conn.Close
  Set conn = Nothing
  
End Sub

Private Sub PrisoedenitTablitsu(rstrTblSrc As String)
  On Error GoTo Err_Handler
  
Dim tdf As TableDef
Dim connOptions As String
Dim myConn As String
Dim myLen As Integer
Dim bNoErr As Boolean
Dim rstrTblDest As String
Dim db As Database
Dim serverConn As String
  
  Set db = CurrentDb
  Set tdf = db.CreateTableDef(rstrTblSrc)
  
  serverConn = "ODBC;DSN=PostgreSQL35W" _
    & ";DATABASE=" & baseName _
    & ";SERVER=" & hostName _
    & ";PORT=" & portNo _
    & ";Uid=" & userName _
    & ";Pwd=" & psw

  tdf.Connect = serverConn
  tdf.SourceTableName = rstrTblSrc
  db.TableDefs.Append tdf
  db.TableDefs.Refresh

  
Err_Handler:
    
  If Err.Number = 0 Then
    Debug.Print "Подключена таб: " & rstrTblSrc
  ElseIf Err.Number = 3010 Then
    DoCmd.Close acTable, rstrTblSrc
    If IsTableExist(rstrTblSrc) = 2 Then DoCmd.DeleteObject acTable, rstrTblSrc
    Debug.Print "отключена таб " & rstrTblSrc
    Call PrisoedenitTablitsu(rstrTblSrc)
  Else
    Debug.Print Err.Number, Err.Description
    'Stop
    'Resume Next
  End If
  Set db = Nothing
  Set tdf = Nothing
    
End Sub
...
Рейтинг: 0 / 0
RLS защита на уровне строк
    #39762977
Павел Лузанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VRS,

Я честно скажу - мало что понимаю, но попробуйте сначала:
Код: vbnet
1.
conn.Open под_суперпользователем


затем в явном виде, без всяких if
Код: vbnet
1.
conn.Close


затем опять:
Код: vbnet
1.
conn.Open под_readonly
...
Рейтинг: 0 / 0
RLS защита на уровне строк
    #39763005
VRS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VRS
Гость
Павел Лузанов,

Павел, проверю, отпишусь.
Заранее благодарю
...
Рейтинг: 0 / 0
RLS защита на уровне строк
    #39763715
VRS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VRS
Гость
Павел ЛузановVRS,

Я честно скажу - мало что понимаю, но попробуйте сначала:
Код: vbnet
1.
conn.Open под_суперпользователем


затем в явном виде, без всяких if
Код: vbnet
1.
conn.Close


затем опять:
Код: vbnet
1.
conn.Open под_readonly



сделал, только с пользователями наоборот
conn.open readonly
conn.close
conn.open superuser

данные superuser ограничены. Не все доступны
...
Рейтинг: 0 / 0
RLS защита на уровне строк
    #39763776
Swa111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
VRS,

Так у Вас явно прописано

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
  serverConn = "ODBC;DSN=PostgreSQL35W" _
    & ";DATABASE=" & baseName _
    & ";SERVER=" & hostName _
    & ";PORT=" & portNo _
    & ";Uid=" & userName _
    & ";Pwd=" & psw

  tdf.Connect = serverConn
  tdf.SourceTableName = rstrTblSrc
  db.TableDefs.Append tdf
  db.TableDefs.Refresh



что при использовании таблиц использовать следующую учетку, Вам нужно перелинковывать таблицы каждый раз как пользователь авторизуется....
...
Рейтинг: 0 / 0
RLS защита на уровне строк
    #39763784
Swa111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Извиняюсь, сразу не заметил логики что таблица отключается если уже была подключена, но думаю все равно нужно смотреть в эту сторону, посмотрите действительно ли меняется строка подключения, проверьте по шагам действительно ли проходят все этапы
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / RLS защита на уровне строк
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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