Пользователь базы данных postgresql
Есть owner базы данных, нужно добавить еще одного пользователя с такими же правами. Если конкретно то с правами на update/delete/alter и т.д. Как это возможно сделать?
Отслеживать
1,204 8 8 серебряных знаков 17 17 бронзовых знаков
задан 20 июн 2018 в 8:26
97 1 1 серебряный знак 4 4 бронзовых знака
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Данная команда позволит создать суперюзер, у которого будут права owner`а.
$ createuser --interactive *username*
Также можно создать роль через CREATE ROLE и, используя —role=. , создать нового пользователя с нужными правами.
Отслеживать
ответ дан 20 июн 2018 в 9:04
Vladimir Afanasyev Vladimir Afanasyev
2,354 2 2 золотых знака 8 8 серебряных знаков 23 23 бронзовых знака
Можно сделать нового пользователя членом «группы» owner :
CREATE ROLE my_coowner LOGIN INHERIT; GRANT owner TO my_coowner;
Если нужен полностью независимый пользователь с точно такими же правами, то AFAIK готового ничего нет, придётся вручную (или полуавтоматически) давать ему точно такие же права на все объекты БД.
PostgreSQL права пользователя
Для начала работы вам понадобится собственно PostgreSQL сервер и доступ в его консоль. Если вы хотите просто поработать в режиме лаборатории, то можно воспользоваться free tier (бесплатной пробной версией) в одном из клаудов, например AWS, или быстро поднять PostgreSQL на лэптопе, используя docker:
docker run -d —name postgres postgres
docker exec -ti postgres psql -U postgres
Пользователь «postgres» — пользователь PostgreSQL по-умолчанию. Он также является суперпользователем. При подключении через сокет обычно пароль не требуется. Подключение по TCP/IP однако может сопровождаться запросом пароля, но в большинстве установок PostgreSQL пароль postgres по-умолчанию «postgres».
На заметку: в PostgreSQL права суперпользователя не ограничены, однако чтобы изменить суперпользователя или создать нового, вам самим нужно быть суперпользователем.
Вы всегда начинаете с того, что заходите суперпользователем, а дальше уже создаете непривилегированных пользователей, базы, схемы и т.д. Хотя правильнее будет говорить «роли», так как с версии 8.1 пользователи и группы в PostgreSQL были заменены на роли. Роли могут быть членами других ролей — в этом случае они выступают аналогом группы, но в простейшем случае роль в PostgreSQL следует интерпретировать как обычного пользователя
Чтобы в PostgreSQL создать роль введите в консоль
CREATE ROLE test WITH LOGIN PASSWORD ‘test’;
Данная команда позволяет в PostgreSQL создать роль с именем «test» и паролем «test» и, внимание — мы уже начали работать с правами, выдать ей право подключаться с серверу баз данных. Очень важно — заострите внимание на слове «сервер баз данных», так как эта привилегия регулирует именно возможность подключения к серверу, но не к базе. Да, в отличие от того же MySQL, PostgreSQL разделяет эти два понятия. Т.е. если у вас есть право подключаться к серверу баз данных (PostgreSQL), это еще далеко не факт, что у вас есть право также подключаться к базам, хранящимся на этом сервере. Если LOGIN не указать, то по-умолчанию свежие роли такой привилегии не получают и не могут подключаться к серверу баз данных. А зачем нам вообще может понадобиться пользователь без права подключения к серверу баз данных? Например, снимая этот атрибут, мы можем временно блокировать пользователей, или использовать такие роли в качетве группы, т.е. выдавая права на группу, мы обычно не хотим, чтобы кто-то мог подключаться от имени самой группы.
Давайте посмотрим, какие еще атрибуты мы можем передавать команде CREATE ROLE
И так у нас есть роль «test», а это значит, что время создать базу и дать нашей роли право чтения или записи в эту базу. Как было отмечено выше, мы можем дать право самой роли создавать базы, или создать ее от имени суперпользователя. Выбор за вами, если вы указали при создании роли атрибут CREATEDB, то можете смело переподключаться, используя роль «test». Если нет, то тут два пути: продолжить от имени суперпользователя или дать роли право создания баз. Сделать это можно командой ALTER ROLE как показано ниже
ALTER ROLE test CREATEDB;
Проверим наш сетап. В PostgreSQL список ролей можно получить командой ‘\du’
postgres=# \du
List of roles
Role name | Attributes | Member of
————+————+————
test | Create DB | <>
.
Теперь можно перейти к созланию базы. Сделать можно сделующим образом
CREATE DATABASE test WITH ENCODING UTF8;
База создана! Как и в случае с созданием ролей, при создании базы тоже можно указать ряд атрибутов. Давайте рассмотрим наиболее интересные с точки зрения прав доступа
OWNER
TEMPLATE
CONNECTION LIMIT
Начнем с OWNER. Мы тем самым плавно подошли к концепции владения. В PostgreSQL действует правило: тот, кто объект создает, будь-то база, схема, таблица или что-либо еще, получает неограниченные права на этот оъект. Т.е., если вы создавали базы от имени суперпользователя, то он будет владеть этой базой и всеми правами на нее, если от имени роли, то роль. И никакие другие непривелегированные роли к этим объектам доступ иметь не будут.
Казалось бы логично, но нет. В PostgreSQL есть такая штука как PUBLIC — неявная псевдо роль, неявными членами которой является все роли. И у нее есть некоторые права по-умолчанию, которые некоторых заставляют чесаться. К примеру, создали вы базу, и даже не важно от имени суперпользоателя или непривелегированной роли, тут кто-то другой логинится и начинает совершенно спокойно создавать в вашей базе таблицы, и PostreSLQ даже не заикнется, что возможно это не то, что вы имели ввиду. Почему так происходит и как это лечить? Давайте разбираться
Начать пожалуй стоит с концепции наймспэйсинга

Этот рисунок говорит о том, что ваши таблицы, вьюзы и прочие элементы базы данных должны иметь уникальные имена только в пределах схемы. Схема в PostgreSQL это такой аналог нэймспэйсов. Т.е. как сервер баз данных может хранить некоторое колличетво собственно баз данных, так и каждая база данных внутри это сервера может содержать некоторое количество схем.
На заметку: PostgreSQL не предоставляет возможность работать со схемой одной базы будучи подключенным к другой. Для того, чтобы поработать со схемой другой базы необходимо переподключиться, указав нужое имя базы
Каждая база обязана иметь хотя бы одну схему, и она создается по-умолчанию при создании базы и носит название PUBLIC. Отсюда и ноги растут у проблем с чрезмерно разрешительными, как некоторым кажется, правами доступа. Но вот уже однажды создав таблицу даже в схеме PUBLIC, скажем от имени непривелегированной роли, уже никакие другие роли доступ к данным, хранящимся внутри этой таблицы, не получат. Однако они все еще смогут вывести список ваших таблиц.
Как решить эту проблему, если вас не устраивает такое положение дел? Что ж, решать-то надо на самом деле две проблемы. Во-первых, отнять у PUBLIC возможность поключаться к базе данных:
REVOKE ALL PRIVILEGES ON DATABASE test FROM PUBLIC;
GRANT CONNECT ON DATABASE test to test;
Данный сет комманд снимает все привилегии с PUBLIC относительно базы данных «test», а их мы напомним всего 4: CREATE, CONNECT, TEMPORARY и TEMP, и выдает роли «test» возможность только подключаться к базе данных
Вариантов же решения проблемы со схемой ровно два: создать схему отличную от PUBLIC. Там уже никакие настройки по-умолчанию до вас не доберутся. Вы создали схему — вы ее владелец. Всем остальным для доступа к схеме понадобится явное разрешение вас или суперпользователя. Или наоборот, как и в случае с базой, отнять у PUBLIC доступ собственно к PUBLIC схеме. Сделать это можно командой
REVOKE ALL PRIVILEGES ON SCHEMA public FROM PUBLIC;
После такого никто не то что создавать таблицы — просмотреть список таблиц уже не сможет. Если вы все же хотите оставить возможность просмотра списка таблиц, то такую привилегию надо теперь явно выдать какой-то конкретной роли или всем (PUBLIC)
GRANT USAGE ON SCHEMA public TO PUBLIC
Давайте подытожим знания о правах по-умолчаю PUBLIC (заметьте, мы специально не называем это ролью) в таблице
Право читать и писать в элементы базы данных по-умолчанию есть только у владельца. Требуется явное разрешение другим ролям для снятия этого ограничения
Идем дальше. А дальше — хуже. Мы разобрались с сервером баз данных, базами и схемами. А как же элементы базы данных, такие как таблицы, вьюзы, последовательности? Тут тоже есть, что понастраивать, особенно если вам нужно в PostgreSQL создать пользователя и дать права только на чтение (readonly) для, например, выполнения дампа или гранта команде анализа лимитированного доступа к данным. Соответственно последовательность операций будет такая:
- Создаем новую роль
- Выдаем роли возможность подключаться к базе
- Даем возможность роли читать схему public, или другую, если вы предпочитаете не работать со схемой public
- Даем возможность читать таблицы в указанной схеме
Предположим, вы работаете в схеме public, то в командах PostgreSQL это будет выглядеть следующим образом
CREATE ROLE ro_user WITH LOGIN NOINHERIT PASSWORD ‘changeme’;
GRANT CONNECT ON DATABASE test TO ro_user;
GRANT USAGE ON SCHEMA public TO ro_user;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO ro_user;
И вот, казалось бы момент счастья, но PostgreSQL и здесь свинью подложил. Если после такой операции вы создали новую таблицу, то внимание, ваш ro_user не будет иметь к ней доступа! Решить проблему можно выполнив команды выше еще раз, или же поработать над такой штукой, как привилегии по-умолчанию. Соответственно, чтобы ro_user мог радостно читать данные даже из вновь созданных таблиц, вам следует выполнить
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO ro_user;
Если структура базы чуть более сложная, чем обычно, возможно вам понадобится дать права также на последовательности и процедуры
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT USAGE,SELECT ON SEQUENCES TO ro_user;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT EXECUTE ON ROUTINES TO ro_user;
Owner to postgresql что это
CREATE DATABASE — создать базу данных
Синтаксис
CREATE DATABASEимя[ [ WITH ] [ OWNER [=]имя_пользователя] [ TEMPLATE [=]шаблон] [ ENCODING [=]кодировка] [ LC_COLLATE [=]категория_сортировки] [ LC_CTYPE [=]категория_типов_символов] [ TABLESPACE [=]табл_пространство] [ ALLOW_CONNECTIONS [=]разр_подключения] [ CONNECTION LIMIT [=]предел_подключений] [ IS_TEMPLATE [=]это_шаблон] ]
Описание
Команда CREATE DATABASE создаёт базу данных PostgreSQL .
Чтобы создать базу данных, необходимо быть суперпользователем или иметь специальное право CREATEDB . См. CREATE USER .
По умолчанию новая база данных создаётся копированием стандартной системной базы данных template1 . Задать другой шаблон можно, добавив указание TEMPLATE имя . В частности, написав TEMPLATE template0 , можно создать девственно чистую базу данных, содержащую только стандартные объекты, предопределённые установленной версией PostgreSQL . Это бывает полезно, когда копировать в новую базу любые дополнительные объекты, добавленные локально в template1 , нежелательно.
Параметры
Имя создаваемой базы данных. имя_пользователя
Имя пользователя (роли), назначаемого владельцем новой базы данных, либо DEFAULT , чтобы владельцем стал пользователь по умолчанию (а именно, пользователь, выполняющий команду). Чтобы создать базу данных и сделать её владельцем другую роль, необходимо быть непосредственным или опосредованным членом этой роли, либо суперпользователем. шаблон
Имя шаблона, из которого будет создаваться новая база данных, либо DEFAULT , чтобы выбрать шаблон по умолчанию ( template1 ). кодировка
Кодировка символов в новой базе данных. Укажите строковую константу (например, ‘SQL_ASCII’ ) или целочисленный номер кодировки, либо DEFAULT , чтобы выбрать кодировку по умолчанию (а именно, кодировку шаблона). Наборы символов, которые поддерживает PostgreSQL , перечислены в Подразделе 22.3.1. Дополнительные ограничения описаны ниже. категория_сортировки
Порядок сортировки ( LC_COLLATE ), который будет использоваться в новой базе данных. Этот параметр определяет порядок сортировки строк, например, в запросах с ORDER BY, а также порядок индексов по текстовым столбцам. По умолчанию используется порядок сортировки, установленный в шаблоне. Дополнительные ограничения описаны ниже. категория_типов_символов
Классификация символов ( LC_CTYPE ), которая будет применяться в новой базе данных. Этот параметр определяет принадлежность символов категориям, например: строчные, заглавные, цифры и т. п. По умолчанию используется классификация символов, установленная в шаблоне. Дополнительные ограничения описаны ниже. табл_пространство
Имя табличного пространства, связываемого с новой базой данных, или DEFAULT для использования табличного пространства шаблона. Это табличное пространство будет использоваться по умолчанию для объектов, создаваемых в этой базе. За подробностями обратитесь к CREATE TABLESPACE . разр_подключения
Если false, никто не сможет подключаться к этой базе данных. По умолчанию имеет значение true, то есть подключения принимаются (если не ограничиваются другими механизмами, например, GRANT / REVOKE CONNECT ). предел_подключений
Максимальное количество одновременных подключений к этой базе данных. Значение -1 (по умолчанию) снимает ограничение. это_шаблон
Если true, базу данных сможет клонировать любой пользователь с правами CREATEDB ; в противном случае (по умолчанию), клонировать эту базу смогут только суперпользователи и её владелец.
Дополнительные параметры могут записываться в любом порядке, не обязательно так, как показано выше.
Замечания
CREATE DATABASE нельзя выполнять внутри блока транзакции.
Ошибки, содержащие сообщение « не удалось инициализировать каталог базы данных » , чаще всего связаны с нехваткой прав в каталоге данных, заполнением диска или другими проблемами в файловой системе.
Для удаления базы данных применяется DROP DATABASE .
Программа createdb представляет собой оболочку этой команды, созданную ради удобства.
Конфигурационные параметры уровня базы данных (устанавливаемые командой ALTER DATABASE ) и разрешения уровня базы (устанавливаемые командой GRANT ) из шаблона не копируются.
Хотя с помощью этой команды можно скопировать любую базу данных, а не только template1 , указав её имя в качестве имени шаблона, она не предназначена (пока) для использования в качестве универсального средства вроде « COPY DATABASE » . Принципиальным ограничением является невозможность копирования базы данных шаблона, если установлены другие подключения к ней. CREATE DATABASE выдаёт ошибку, если при запуске команды есть другие подключения к этой базе; в противном случае новые подключения к базе блокируются до завершения команды CREATE DATABASE . За дополнительными сведениями обратитесь к Разделу 21.3.
Кодировка символов, указанная для новой базы данных, должна быть совместима с выбранными параметрами локали ( LC_COLLATE и LC_CTYPE ). Если выбрана локаль C (или равнозначная ей POSIX ), допускаются все кодировки, но для других локалей правильно будет работать только одна кодировка. (В Windows, однако, кодировку UTF-8 можно использовать с любой локалью.) CREATE DATABASE позволяет суперпользователям указать кодировку SQL_ASCII вне зависимости от локали, но этот вариант считается устаревшим и может привести к ошибочному поведению строковых функций, если в базе хранятся данные в кодировке, несовместимой с заданной локалью.
Параметры локали и кодировка должны соответствовать тем, что установлены в шаблоне, если только это не template0 . Это ограничение объясняется тем, что другие базы данных могут содержать данные в кодировке, отличной от заданной, или индексы, порядок сортировки которых определяются параметрами LC_COLLATE и LC_CTYPE . При копировании таких данных получится база, которая будет испорченной согласно новым параметрам локали. Однако template0 определённо не содержит какие-либо данные или индексы, зависящие от кодировки или локали.
Ограничение CONNECTION LIMIT действует только приблизительно; если одновременно запускаются два сеанса, тогда как в базе остаётся только одно « свободное место » , может так случиться, что будут отклонены оба подключения. Кроме того, это ограничение не распространяется на суперпользователей.
Примеры
Создание базы данных:
CREATE DATABASE lusiadas;
Создание базы данных sales , принадлежащей пользователю salesapp , с табличным пространством по умолчанию salesspace :
CREATE DATABASE sales OWNER salesapp TABLESPACE salesspace;
Создание базы данных music с кодировкой ISO-8859-1:
CREATE DATABASE music ENCODING 'LATIN1' TEMPLATE template0;
В этом примере предложение TEMPLATE template0 будет необходимым, только если кодировка template1 отличается от ISO-8859-1. Заметьте, что при смене кодировки может потребоваться также выбрать другие параметры LC_COLLATE и LC_CTYPE .
Совместимость
Оператор CREATE DATABASE отсутствует в стандарте SQL. Базы данных равнозначны каталогам, а их создание в стандарте определяется реализацией.
См. также
| Пред. | Наверх | След. |
| CREATE CONVERSION | Начало | CREATE DOMAIN |
Owner to postgresql что это
Когда в базе данных создаётся объект, ему назначается владелец. Владельцем обычно становится роль, с которой был выполнен оператор создания. Для большинства типов объектов в исходном состоянии только владелец (или суперпользователь) может делать с объектом всё, что угодно. Чтобы разрешить использовать его другим ролям, нужно дать им права.
Существует несколько типов прав: SELECT , INSERT , UPDATE , DELETE , TRUNCATE , REFERENCES , TRIGGER , CREATE , CONNECT , TEMPORARY , EXECUTE и USAGE . Набор прав, применимых к определённому объекту, зависит от типа объекта (таблица, функция и т. д.). Более подробно назначение этих прав описывается ниже. Как применяются эти права, вы также увидите в следующих разделах и главах.
Неотъемлемое право изменять или удалять объект имеет только владелец объекта.
Объекту можно назначить нового владельца с помощью команды ALTER для соответствующего типа объекта, например:
ALTER TABLEимя_таблицыOWNER TOновый_владелец;
Суперпользователь может делать это без ограничений, а обычный пользователь — только если он является одновременно текущим владельцем объекта (или членом роли владельца) и членом новой роли.
Для назначения прав применяется команда GRANT . Например, если в базе данных есть роль joe и таблица accounts , право на изменение таблицы можно дать этой роли так:
GRANT UPDATE ON accounts TO joe;
Если вместо конкретного права написать ALL , роль получит все права, применимые для объекта этого типа.
Для назначения права всем ролям в системе можно использовать специальное имя « роли » : PUBLIC . Также для упрощения управления ролями, когда в базе данных есть множество пользователей, можно настроить « групповые » роли; подробнее об этом см. Главу 20.
Чтобы лишить пользователей прав, используйте команду REVOKE :
REVOKE ALL ON accounts FROM PUBLIC;
Особые права владельца объекта (то есть права на выполнение DROP , GRANT , REVOKE и т. д.) всегда неявно закреплены за владельцем и их нельзя назначить или отобрать. Но владелец объекта может лишить себя обычных прав, например, разрешить всем, включая себя, только чтение таблицы.
Обычно распоряжаться правами может только владелец объекта (или суперпользователь). Однако возможно дать право доступа к объекту « с правом передачи » , что позволит получившему такое право назначать его другим. Если такое право передачи впоследствии будет отозвано, то все, кто получил данное право доступа (непосредственно или по цепочке передачи), потеряют его. Подробнее об этом см. справку GRANT и REVOKE .
Все существующие права перечислены ниже:
Позволяет выполнять SELECT для любого столбца или перечисленных столбцов в заданной таблице, представлении, матпредставлении или другом объекте табличного вида. Также позволяет выполнять COPY TO. Помимо этого, данное право требуется для обращения к существующим значениям столбцов в UPDATE или DELETE . Для последовательностей это право позволяет пользоваться функцией currval . Для больших объектов оно позволяет читать содержимое объекта. INSERT
Позволяет вставлять с помощью INSERT строки в заданную таблицу, представление и т. п. Может назначаться для отдельных столбцов; в этом случае только этим столбцам можно присваивать значения в команде INSERT (другие столбцы получат значения по умолчанию). Также позволяет выполнять COPY FROM. UPDATE
Позволяет изменять с помощью UPDATE данные во всех, либо только перечисленных, столбцах в заданной таблице, представлении и т. п. (На практике для любой нетривиальной команды UPDATE потребуется и право SELECT , так как она должна обратиться к столбцам таблицы, чтобы определить, какие строки подлежат изменению, и/или вычислить новые значения столбцов.) Для SELECT . FOR UPDATE и SELECT . FOR SHARE также требуется иметь это право как минимум для одного столбца, помимо права SELECT . Для последовательностей это право позволяет пользоваться функциями nextval и setval . Для больших объектов это право позволяет записывать данные в объект или обрезать его. DELETE
Позволяет удалять с помощью DELETE строки из таблицы, представления и т. п. (На практике для любой нетривиальной команды DELETE потребуется также право SELECT , так как она должна обратиться к колонкам таблицы, чтобы определить, какие строки подлежат удалению.) TRUNCATE
Позволяет опустошать таблицу с помощью TRUNCATE . REFERENCES
Позволяет создавать ограничение внешнего ключа, обращающееся к таблице или определённым столбцам таблицы. TRIGGER
Позволяет создавать триггер для таблицы, представления и т. п. CREATE
Для баз данных это право позволяет создавать в них схемы и публикации.
Для схем это право позволяет создавать новые объекты в заданной схеме. Чтобы переименовать существующий объект, необходимо быть его владельцем и иметь это право для схемы, содержащей его.
Для табличных пространств это право позволяет создавать таблицы, индексы и временные файлы в определённом табличном пространстве, а также создавать базы данных, для которых это пространство будет основным. (Учтите, что когда это право отзывается, существующие объекты остаются в прежнем расположении.) CONNECT
Позволяет подключаться к базе данных. Это право проверяется при установлении соединения (в дополнение к условиям, определённым в конфигурации pg_hba.conf ). TEMPORARY
Позволяет создавать временные таблицы в определённой базе данных. EXECUTE
Позволяет вызывать функцию или процедуру, в том числе использовать любые операторы, реализованные данной функцией. Это единственный тип прав, применимый к функциям и процедурам. USAGE
Для процедурных языков это право позволяет создавать функции на определённом языке. Это единственный тип прав, применимый к процедурным языкам.
Для схем это право даёт доступ к содержащимся в них объектам (предполагается, что при этом имеются права, необходимые для доступа к самим объектам). По сути это право позволяет субъекту « просматривать » объекты внутри схемы. Без этого разрешения имена объектов всё же можно будет узнать, например, обратившись к системным каталогам. Кроме того, если отозвать это право, в существующих сеансах могут оказаться операторы, для которых просмотр имён объектов был выполнен ранее, так что это право не позволяет абсолютно надёжно перекрыть доступ к объектам.
Для последовательностей это право позволяет использовать функции currval и nextval .
Для типов и доменов это право позволяет использовать заданный тип или домен при создании таблиц, функций или других объектов схемы. (Заметьте, что это право не ограничивает общее « использование » типа, например обращение к значениям типа в запросах. Без этого права нельзя только создавать объекты, зависящие от заданного типа. Основное предназначение этого права в том, чтобы ограничить круг пользователей, способных создавать зависимости от типа, которые могут впоследствии помешать владельцу типа изменить его.)
Для обёрток сторонних данных это право позволяет создавать использующие их определения сторонних серверов.
Для сторонних серверов это право позволяет создавать использующие их сторонние таблицы. Наделённые этим правом могут также создавать, модифицировать или удалять собственные сопоставления пользователей, связанные с определённым сервером.
Права, требующиеся для других команд, указаны на страницах справки этих команд.
Postgres Pro по умолчанию назначает роли PUBLIC права для некоторых типов объектов, когда эти объекты создаются. Для таблиц, столбцов, последовательностей, обёрток сторонних данных, сторонних серверов, больших объектов, схем и табличных пространств PUBLIC по умолчанию никаких прав не получает. Для других типов объектов PUBLIC получает следующие права по умолчанию: CONNECT и TEMPORARY (создание временных таблиц) для баз данных; EXECUTE — для функций и процедур; USAGE — для языков и типов данных (включая домены). Владелец объекта, конечно же, может отозвать (посредством REVOKE ) как явно назначенные права, так и права по умолчанию. (Для максимальной безопасности команду REVOKE нужно выполнять в транзакции, создающей объект; тогда не образуется окно, в котором другой пользователь сможет обратиться к объекту.) Кроме того, эти изначально назначаемые права по умолчанию можно переопределить, воспользовавшись командой ALTER DEFAULT PRIVILEGES .
В Таблице 5.1 показаны однобуквенные сокращения, которыми обозначаются эти права в списках ACL (Access Control List, Список контроля доступа). Вы увидите эти сокращения в выводе перечисленных ниже команд psql или в столбцах ACL в системных каталогах.
Таблица 5.1. Сокращённые обозначения прав в ACL
| Право | Сокращение | Применимые типы объектов |
|---|---|---|
| SELECT | r ( « read » , чтение) | LARGE OBJECT , SEQUENCE , TABLE (и объекты, подобным таблицам), столбец таблицы |
| INSERT | a ( « append » , добавление) | TABLE , столбец таблицы |
| UPDATE | w ( « write » , запись) | LARGE OBJECT , SEQUENCE , TABLE , столбец таблицы |
| DELETE | d | TABLE |
| TRUNCATE | D | TABLE |
| REFERENCES | x | TABLE , столбец таблицы |
| TRIGGER | t | TABLE |
| CREATE | C | DATABASE , SCHEMA , TABLESPACE |
| CONNECT | c | DATABASE |
| TEMPORARY | T | DATABASE |
| EXECUTE | X | FUNCTION , PROCEDURE |
| USAGE | U | DOMAIN , FOREIGN DATA WRAPPER , FOREIGN SERVER , LANGUAGE , SCHEMA , SEQUENCE , TYPE |
В Таблица 5.2 для каждого типа SQL-объекта показаны относящиеся к нему права, с использованием приведённых выше сокращений. Также в ней для каждого типа приведена команда psql , которая позволяет узнать, какие права назначены для объекта этого типа.
Таблица 5.2. Сводка прав доступа
| Тип объекта | Все права | Права PUBLIC по умолчанию | Команда psql |
|---|---|---|---|
| DATABASE | CTc | Tc | \l |
| DOMAIN | U | U | \dD+ |
| FUNCTION или PROCEDURE | X | X | \df+ |
| FOREIGN DATA WRAPPER | U | нет | \dew+ |
| FOREIGN SERVER | U | нет | \des+ |
| LANGUAGE | U | U | \dL+ |
| LARGE OBJECT | rw | нет | |
| SCHEMA | UC | нет | \dn+ |
| SEQUENCE | rwU | нет | \dp |
| TABLE (и объекты, подобные таблицам) | arwdDxt | нет | \dp |
| Столбец таблицы | arwx | нет | \dp |
| TABLESPACE | C | нет | \db+ |
| TYPE | U | U | \dT+ |
Права, назначенные для определённого объекта, выводятся в виде элементов aclitem , где каждый aclitem отражает разрешения, которые были предоставлены субъекту определённым праводателем. Например, запись calvin=r*w/hobbes означает, что роль calvin имеет право SELECT ( r ) с возможностью передачи ( * ), а также непередаваемое право UPDATE ( w ), и оба эти права даны ему ролью hobbes . Если calvin имеет для этого объекта и другие права, предоставленные ему другим праводателем, они выводятся в отдельном элементе aclitem . Пустое поле правообладателя в aclitem соответствует роли PUBLIC .
Например, предположим, что пользователь miriam создаёт таблицы mytable и выполняет:
GRANT SELECT ON mytable TO PUBLIC; GRANT SELECT, UPDATE, INSERT ON mytable TO admin; GRANT SELECT (col1), UPDATE (col1) ON mytable TO miriam_rw;
Тогда команда \dp в psql покажет:
=> \dp mytable Access privileges Schema | Name | Type | Access privileges | Column privileges | Policies --------+---------+-------+-----------------------+-----------------------+---------- public | mytable | table | miriam=arwdDxt/miriam+| col1: +| | | | =r/miriam +| miriam_rw=rw/miriam | | | | admin=arw/miriam | | (1 row)
Если столбец « Права доступа » (Access privileges) для данного объекта пуст, это значит, что для объекта действуют стандартные права (то есть запись прав в соответствующем каталоге содержит NULL). Права по умолчанию всегда включают все права для владельца и могут также включать некоторые права для PUBLIC в зависимости от типа объекта, как разъяснялось выше. Первая команда GRANT или REVOKE для объекта приводит к созданию записи прав по умолчанию (например, ), а затем изменяет эту запись в соответствии с заданным запросом. Подобным образом, строки, показанные в столбце « Права доступа к столбцам » (Column privileges), выводятся только для столбцов с нестандартными правами доступа. (Заметьте, что в данном контексте под « стандартными правами » всегда подразумевается встроенный набор прав, предопределённый для типа объекта. Если с объектом связан набор прав по умолчанию, полученный после изменения в результате ALTER DEFAULT PRIVILEGES , изменённые права будут всегда выводиться явно, показывая эффект команды ALTER .)
Заметьте, что право распоряжения правами, которое имеет владелец, не отмечается в выводимой сводке. Знаком * отмечаются только те права с правом передачи, которые были явно назначены кому-либо.
| Пред. | Наверх | След. |
| 5.6. Изменение таблиц | Начало | 5.8. Политики защиты строк |