Received: from localhost (unknown [200.46.204.183]) by postgresql.org (Postfix) with ESMTP id A56ED650EA7 for ; Wed, 2 Jul 2008 01:21:47 -0300 (ADT) Received: from postgresql.org ([200.46.204.86]) by localhost (mx1.hub.org [200.46.204.183]) (amavisd-maia, port 10024) with ESMTP id 88628-08 for ; Wed, 2 Jul 2008 01:21:15 -0300 (ADT) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from mx33.mail.ru (mx33.mail.ru [194.67.23.194]) by postgresql.org (Postfix) with ESMTP id BAAFF650EB8 for ; Wed, 2 Jul 2008 01:20:12 -0300 (ADT) Received: from [195.162.52.178] (port=23557 helo=[192.168.1.1]) by mx33.mail.ru with asmtp id 1KDtpC-000ADB-00 for pgsql-ru-general@postgresql.org; Wed, 02 Jul 2008 08:20:10 +0400 Date: Wed, 2 Jul 2008 11:19:58 +0700 From: sftf X-Mailer: The Bat! (v2.04.7) Business Reply-To: sftf X-Priority: 3 (Normal) Message-ID: <417367745.20080702111958@mail.ru> To: pgsql-ru-general@postgresql.org Subject: =?Windows-1251?B?0O7r6Dog8+/w4OLr5e3o5SDk7vHy8+/u7CDqIOTw8+Po7CDw7uv/7C4g?= =?Windows-1251?B?0O7r6CDq4Oog7uH65ery+yDx6PHy5ez7IOHl5+7v4PHt7vHy6C4=?= MIME-Version: 1.0 Content-Type: text/plain; charset=Windows-1251 Content-Transfer-Encoding: 8bit X-Spam: Not detected X-Mras: OK X-Virus-Scanned: Maia Mailguard 1.0.1 X-Spam-Status: No, hits=0.49 tagged_above=0 required=5 tests=UPPERCASE_50_75=0.49 X-Spam-Level: X-Archive-Number: 200807/1 X-Sequence-Number: 827 Разрабатываю приложение с использованием Postgres. Обнаружил, что нет возможности управлять тем, что может делать данная роль с другими ролями. Собственно, интересует: такой возможности не существует по каким-то иделогическим или техническим причинам? Для примера, что собственно я хотел реализовать. В разарабатываемом приложении, я хотел части пользователей (менеджерам отделов) дать возможность создавать пользователей и назначать им роли из ограниченного списка ролей. Для этого я предполагал создвать роли менеджеров так: CREATE ROLE manager NOSUPERUSER CREATEROLE... Однако, согласно существующей сейчас в Postgres модели безопасности, роль с привелегикй 'CREATEROLE' может изменять или удалять ЛЮБЫЕ другие роли, кроме SUPERUSER. Таким образом, создав в системе двух менеджеров невозможно разграничить их возможности по управлению ролями "своих" и "чужих" сотрудников, и вообще любых других ролей кроме суперюзеров. Они даже смогут поменять пароли друг у друга. Я начал в документации искать следующие возможности: - наличие подчиненности ролей (роль имеет роль-создателя) - GRANT описывающий, какие именно существующие роли, данная роль может назначать вновь создаваемым ролям - GRANT описывающий, какие роли данная роль может изменять (включая: какие какие именно параметры роли) - GRANT описывающий, какие роли данная роль может удалять К сожалению таких возможностей не оказалось. Кстати, даже в ORACLE таких возможностей нет, за исключением раздельных системых привелегий CREATE/ALTER/DROP USER, что в данной ситуации ничего существенно не меняет. Конечно можно эту задачу решить на уровне приложения: продублировать список ролей в пользовательской таблице с дополнительной информацией (владельцы ролей, права ролей на другие роли) и создавать/изменять роли Postgres через хранимые процедуры+Dynamic SQL (не знаю пока еще, поддерживется дли динамический SQL в Postgres). Но все же удивительно, почему роли не являются такими же объектами в DAC как и другие объекты СУБД: таблицы, представления, процедуры и т.д.?