БСУБД · transport_lab · этап 1 — 24.09.2026 · этап 2 — 01.10.2026
sNN, логин sNN_student и пароль.Пароль в протокол не записывать.
ksoib.ru найдите карточку своего стенда sNN и нажмите на неё.sNN_student и выданный пароль.transport_lab.Модель уже настроена: sNN_student → student_reader → CONNECT / USAGE / SELECT.
sNN_student — персональная LOGIN-роль;student_reader — групповая NOLOGIN-роль;CONNECT — подключение к БД;USAGE — использование схемы;SELECT — чтение разрешённых таблиц.Роли и права самостоятельно не создаём. GRANT/REVOKE не выполняем.
SELECT current_user, session_user, current_database();current_user = sNN_student, session_user = sNN_student, current_database = transport_lab.Если номер роли не совпадает с вашим стендом — остановитесь и сообщите преподавателю.
SELECT rolname, rolcanlogin, rolinherit, rolsuper, rolcreatedb, rolcreaterole, rolbypassrls FROM pg_roles WHERE rolname=current_user;true; SUPERUSER, CREATEDB, CREATEROLE, BYPASSRLS — false.SELECT member_role.rolname AS member_role, parent_role.rolname AS granted_role FROM pg_auth_members m JOIN pg_roles parent_role ON parent_role.oid=m.roleid JOIN pg_roles member_role ON member_role.oid=m.member WHERE member_role.rolname=current_user;sNN_student → student_reader.student_reader, а персональная учётная запись наследует их через членство.SELECT has_database_privilege(current_user, 'transport_lab', 'CONNECT') AS can_connect, has_schema_privilege(current_user, 'transport', 'USAGE') AS can_use_transport, has_schema_privilege(current_user, 'transport', 'CREATE') AS can_create_in_transport;true, USAGE = true, CREATE = false.SELECT table_name, has_table_privilege(current_user, format('transport.%I', table_name), 'SELECT') AS can_select, has_table_privilege(current_user, format('transport.%I', table_name), 'INSERT') AS can_insert, has_table_privilege(current_user, format('transport.%I', table_name), 'UPDATE') AS can_update, has_table_privilege(current_user, format('transport.%I', table_name), 'DELETE') AS can_delete FROM information_schema.tables WHERE table_schema='transport' AND table_type='BASE TABLE' ORDER BY table_name;true; INSERT/UPDATE/DELETE = false.passengers, bookings, payments, maintenance_records, operational_events. Весь вывод переписывать не надо.SELECT booking_ref, fare_amount, currency, status FROM transport.bookings ORDER BY id LIMIT 5;До окончания пары проверьте, что заполнены разделы протокола 1–6. Затем сформулируйте:
student_reader;permission denied будут ожидаемым результатом.UPDATE transport.bookings SET status=status WHERE false;CREATE TABLE transport.lab02_probe(id integer);SET ROLE operator;SELECT has_table_privilege(current_user, 'transport.lab_meta', 'SELECT') AS can_read_lab_meta;student_reader.