Received: from localhost (unknown [200.46.204.183]) by postgresql.org (Postfix) with ESMTP id C507F650E7D for ; Wed, 2 Jul 2008 06:16:03 -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 59349-03 for ; Wed, 2 Jul 2008 06:15:55 -0300 (ADT) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from mx39.mail.ru (mx39.mail.ru [194.67.23.35]) by postgresql.org (Postfix) with ESMTP id EA28764FD64 for ; Wed, 2 Jul 2008 06:15:57 -0300 (ADT) Received: from [195.162.52.178] (port=19358 helo=[192.168.1.1]) by mx39.mail.ru with asmtp id 1KDyRP-000Jnd-00; Wed, 02 Jul 2008 13:15:55 +0400 Date: Wed, 2 Jul 2008 16:15:53 +0700 From: sftf X-Mailer: The Bat! (v2.04.7) Business Reply-To: sftf X-Priority: 3 (Normal) Message-ID: <1888544450.20080702161553@mail.ru> To: pgsql-ru-general@postgresql.org, "pronix pronix" Subject: =?Windows-1251?B?UmVbMl06IFtwZ3NxbC1ydS1nZW5lcmFsXSDQ7uvoOiDz7/Dg4uvl7ejl?= =?Windows-1251?B?IOTu8fLz7+7sIOog5PDz4+jsIPDu6//sLiDQ7uvoIOrg6iDu4frl6vL7?= =?Windows-1251?B?IPHo8fLl7Psg4eXn7u/g8e3u8fLoLg==?= In-Reply-To: <639ce0480807020100i43212fe0jf53d9f74905f30d8@mail.gmail.com> References: <417367745.20080702111958@mail.ru> <639ce0480807020100i43212fe0jf53d9f74905f30d8@mail.gmail.com> 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/2 X-Sequence-Number: 828 pp> Посмотри ссылку - кажется это то, что вы ищете  http://www.postgresql.org/docs/8.3/interactive/role-membership.html Спасибо, но это не то. Да, там идет речь о наследовании привелегий ролей. Но нет механизма контроля прав доступа одной роли по отношению к другой. Пример: есть два менеджера с возможность создавать роли пользователей СREATE ROLE manager1 LOGIN NOSUPERUSER CREATEROLE СREATE ROLE manager2 LOGIN NOSUPERUSER CREATEROLE и есть две созданные админом групповые роли СREATE ROLE view_doc NOLOGIN NOSUPERUSER NOCREATEROLE СREATE ROLE edit_doc NOLOGIN NOSUPERUSER NOCREATEROLE Проблема №1: неуправляемые права ролей с привиоегией CREATEROLE по отношению к другим не суперюзерским ролям. Например, manager1 и manager2 смогуть изменить или удалить роли view_doc и edit_doc, что нежелательно. В ORACLE хотя бы можно не давать им ALATER ANY ROLE и DROP ANY ROLE. Но даже этого недостаточно. Далее, рассмотрим следующие действия менеджеров: manager1: СREATE ROLE user1 LOGIN NOSUPERUSER NOCREATEROLE -- manager1 создал сотрудника своего отдела manager2: СREATE ROLE user2 LOGIN NOSUPERUSER NOCREATEROLE -- manager2 создал сотрудника своего отдела Теперь manager1 может изменить/удалить сотрудника "не своего отдела": ALTER ROLE user2..., а manager2 тоже может изменить/удалить "чужого" сотрудника: ALTER ROLE user1... Проблема №2: ограниченые возможности по котнролю присвоения ролей. Рассмотрим вариант, когда manager1 должен иметь возможность раздавать только роль view_doc только своим сотрудникам. manager1: GRANT view_doc to user1 Однако он сможет сделать и так GRANT view_doc to user2, чего быть не должно. Нет возможности задать кому именно manager1 может раздать присвоенные ему самому роли. Т.е. привелегия CREATEROLE слишком мощна и содержит в себе много привелегий. Рассмотрим вариант менеджеров без привелегии CREATEROLE (т.е. NOCREATEROLE). 1. Они сразу же потеряют возможность создавать роли пользователей, а нам это нужно. 2. Если мы сделаем так, чтобы менджер хотя бы сам мог раздавать роли: GRANT view_doc to manager1 with admin option то тут две проюлемы: a) manager1 сам дожен имет раздавемые им роли, что не всегда приемлемо б) нет возможности управлять КОМУ ИМЕННО manager1 может назначить каждую имеющуюся у него роль Итого: было бы хорошо, если бы роли могли выступать объектами, по отношению к которым назначаются права доступа. Типа: кто может создавaть | удалять какие роли GRANT { { CREATE | DROP } [,...] | ALL [ PRIVILEGES ] } ON { {ROLE rolename [, ...]} | ANY ROLE} TO { rolename } [, ...] [ WITH ADMIN OPTION ] кто, что и в каких ролях может менять GRANT ALTER { LOGIN | PASSWORD | INHERIT | RENAME | VALID | SET | и т.д. } ON ROLE rolename [, ...] TO { rolename } [, ...] [ WITH ADMIN OPTION ] кто какие роли и кому может назначать GRANT GRANT {ANY | rolename} ON ROLE rolename [, ...] TO { rolename } [, ...] [ WITH GRANT OPTION ]