Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / RLS защита на уровне строк / 21 сообщений из 21, страница 1 из 1
14.01.2019, 17:24
    #39759456
VRS
VRS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RLS защита на уровне строк
создал пользователя "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
14.01.2019, 17:37
    #39759465
Melkij
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RLS защита на уровне строк
VRS,

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



Но если после revoke пользователь не ругается на permission denied for table importbanka - то проверьте сперва, тот ли это вообще хост, база и схема.
...
Рейтинг: 0 / 0
15.01.2019, 12:21
    #39759714
VRS
VRS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RLS защита на уровне строк
удалил. создаю по новой пользователя
Код: 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
15.01.2019, 12:38
    #39759716
Павел Лузанов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RLS защита на уровне строк
VRS,

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Код: 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
22.01.2019, 16:57
    #39762977
Павел Лузанов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RLS защита на уровне строк
VRS,

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


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


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

Павел, проверю, отпишусь.
Заранее благодарю
...
Рейтинг: 0 / 0
23.01.2019, 17:17
    #39763715
VRS
VRS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RLS защита на уровне строк
Павел Лузанов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
23.01.2019, 18:09
    #39763776
Swa111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RLS защита на уровне строк
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
23.01.2019, 18:28
    #39763784
Swa111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RLS защита на уровне строк
Извиняюсь, сразу не заметил логики что таблица отключается если уже была подключена, но думаю все равно нужно смотреть в эту сторону, посмотрите действительно ли меняется строка подключения, проверьте по шагам действительно ли проходят все этапы
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / RLS защита на уровне строк / 21 сообщений из 21, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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