powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Организация представлений
12 сообщений из 12, страница 1 из 1
Организация представлений
    #39130148
Stark3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, уважаемые!

Подскажите, как организовать доступ к одной таблице БД разных пользователей, чтобы изолировать выборку от других?
На примере:
user_login private_data1 img231 img132 img333 img253 img29

Пользователь заходит под своим логином и видит только те данные, которые соответствуют ему.

В настоящем, на клиенте запрос формируется как
Код: sql
1.
SELECT * FROM table WHERE user_login = "3"


Но, если зайти через стороннее ПО и ввести
Код: sql
1.
SELECT * FROM table

то увидим все.

Знаю, что можно сделать представление и на него навесить права, но тогда нужно 1 (или более) представлений на каждого пользователя. Когда пользователей, например, 1000, то это не вариант...

Как решаются подобные примеры?
...
Рейтинг: 0 / 0
Организация представлений
    #39130187
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stark3,
не обязательно, можно попробовать и одним представлением сделать, с параметром- функцией

или на процедурах
...
Рейтинг: 0 / 0
Организация представлений
    #39130206
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Партиционировать таблицу. А список доступных разделов (и соответствующую временную MERGE-таблицу) формировать по учётной записи в соответствии с её правами хранимой процедурой.
...
Рейтинг: 0 / 0
Организация представлений
    #39130208
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaА список доступных разделов (и соответствующую временную MERGE-таблицу) формировать по учётной записи в соответствии с её правами хранимой процедурой.Это как?
В MySQL же нет системы назначения прав по партициям.
...
Рейтинг: 0 / 0
Организация представлений
    #39130271
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftВ MySQL же нет системы назначения прав по партициям.
Зря я написал слово "партиционировать". Надеялся, что термин MERGE объяснит, что я хочу сказать. Не получилось...

В общем, каждая уникальная комбинация прав доступа - своя таблица (или фильтрующее представление). А для комбинации нескольких наборов прав - объединение. ХП же возвращает имя объекта, через который следует выполнять доступ к данным.
...
Рейтинг: 0 / 0
Организация представлений
    #39130356
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stark3,

...сам не проверял, но может получится:

сделать вьюшку типа:

Код: sql
1.
2.
3.
4.
create SQL SECURITY DEFINER
view public_table_name as
select * from private_table_name
where user_login = USER()



всем пользователям и сторонним ПО
дать права на public_table_name
а себе оставить права на private_table_name.

Самое интересное что вернет USER(), есть подозрение что
вернет пользователя. Дял сведения CURRENT_USER()
точно вернет создателя ибо SQL SECURITY DEFINER.

Если же USER() тоже не вернет пользователя, то продется сделать
функцию:

create function real_user()
returns varchar(64) as
return USER();

если и это не поможет, то

create function real_user()
returns varchar(64) as
return @abracadabra;

@abracadabra = CURRENT_USER()
можно выставить триггером на соединение.
SET GLOBAL init_connect = "CALL login_trigger()";
...
Рейтинг: 0 / 0
Организация представлений
    #39130462
Stark3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv...или на процедурах
Спасибо, решено сделать именно на хп . Подскажите, вызывающий хп гарантированно не сможет получить права определяющего, верно?)

AkinaВ общем, каждая уникальная комбинация прав доступа - своя таблица (или фильтрующее представление). А для комбинации нескольких наборов прав - объединение. ХП же возвращает имя объекта, через который следует выполнять доступ к данным.
Честно, без бутылки не разберусь, но спасибо за совет.

javajdbc...сделать вьюшку типа...
Спасибо за совет, интересно сработает ли, на досуге попробую. Но с первого взгляда под CURRENT_USER() напрашивается SUBSTRING_INDEX, чтобы отделить логин от хоста.
Плюс для моей задачи этот способ не сработает т.к. от введенного логина через таблицу соответствий должен браться табельный номер - и уже от него происходят все запросы в БД (я не говорил об этом, чтобы упростить пример)
...
Рейтинг: 0 / 0
Организация представлений
    #39130477
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stark3вызывающий хп гарантированно не сможет получить права определяющего, верно?
Зависит от SQL SECURITY. Если INVOKER, то да.
...
Рейтинг: 0 / 0
Организация представлений
    #39130490
Stark3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaЗависит от SQL SECURITY. Если INVOKER, то да.
Благодарю!

Очень хороший форум и жители, всегда быстро и точно получаю ответы :)
С наступающим всех!
...
Рейтинг: 0 / 0
Организация представлений
    #39130573
Stark3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Самое интересное что вернет USER(), есть подозрение что
вернет пользователя
Подтверждаю, возвращает при DEFINER вызывающего пользователя, а не определяющего. Очень помогло, спс
...
Рейтинг: 0 / 0
Организация представлений
    #39130878
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stark3
Плюс для моей задачи этот способ не сработает т.к. от введенного логина через таблицу соответствий должен браться табельный номер - и уже от него происходят все запросы в БД (я не говорил об этом, чтобы упростить пример)



...ок, без проблем, парочка решений:

1. добавить таблицу соответсвеий во вью, или

2. по тригеру на соединение записать табельный номер
пользователя в какую-нибудь юзер-дефинед переменную
и сделать функцию GET_REAL_USER_ID()которая возврашает этот номер.
Внутри view можно вызывать функции.

Код: sql
1.
2.
3.
4.
create SQL SECURITY DEFINER
view public_table_name as
select * from private_table_name
where user_ID = GET_REAL_USER_ID()
...
Рейтинг: 0 / 0
Организация представлений
    #39130880
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stark3Самое интересное что вернет USER(), есть подозрение что
вернет пользователя
Подтверждаю, возвращает при DEFINER вызывающего пользователя, а не определяющего. Очень помогло, спс


O! спасибо! будем знать!
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Организация представлений
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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