Changeset: 07091921a49f for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=07091921a49f Added Files: sql/test/Users/Tests/grantAndRevokeUserLogedIN.Bug-3476.SQL.py sql/test/Users/Tests/grantAndRevokeUserLogedIN.Bug-3476.stable.err sql/test/Users/Tests/grantAndRevokeUserLogedIN.Bug-3476.stable.out Branch: default Log Message:
A test for bug 3476. diffs (230 lines): diff --git a/sql/test/Users/Tests/grantAndRevokeUserLogedIN.Bug-3476.SQL.py b/sql/test/Users/Tests/grantAndRevokeUserLogedIN.Bug-3476.SQL.py new file mode 100644 --- /dev/null +++ b/sql/test/Users/Tests/grantAndRevokeUserLogedIN.Bug-3476.SQL.py @@ -0,0 +1,58 @@ +### +# Assess that the user can use a granted privilege without having to logout. +# Assess that a user can no longer use the privilege as soon as it was revoked. +### + +import sys, time, monetdb.sql, os + +def connect(username, password): + return monetdb.sql.connect(database = os.getenv('TSTDB'), + hostname = 'localhost', + port = int(os.getenv('MAPIPORT')), + username = username, + password = password, + autocommit = True) + +def query(conn, sql): + print(sql) + cur = conn.cursor() + cur.execute(sql) + r = cur.fetchall() + cur.close() + print(r) + +def run(conn, sql): + print(sql) + r = conn.execute(sql) + print(r) + +c1 = connect('monetdb', 'monetdb') +# Create a new schema with a new table. +run(c1, 'CREATE SCHEMA new_schema_as_well') +run(c1, 'SET SCHEMA new_schema_as_well') +run(c1, 'CREATE TABLE test (x int, y int)') +run(c1, 'INSERT INTO test VALUES (-1, -1)') + +# Create a new user and grant the right to select. +run(c1, 'CREATE USER new_user WITH PASSWORD \'new_quite_long_password\' NAME \'newUser\' SCHEMA new_schema_as_well') +run(c1, 'GRANT SELECT ON new_schema_as_well.test TO new_user') +run(c1, 'GRANT UPDATE ON new_schema_as_well.test TO new_user') +run(c1, 'GRANT INSERT ON new_schema_as_well.test TO new_user') +run(c1, 'GRANT DELETE ON new_schema_as_well.test TO new_user') + +# Login the new user, and select. +c2 = connect('new_user', 'new_quite_long_password') +query(c2, 'SELECT * FROM test') +run(c2, 'UPDATE test SET x = -3 WHERE y = -1') +run(c2, 'INSERT INTO test VALUES (0, 0)') +run(c2, 'DELETE FROM test WHERE y = -2') + +# Revoke the right to select from the new user. +run(c1, 'REVOKE SELECT ON new_schema_as_well.test FROM new_user') + +# The new user should not be able to select anymore. +run(c2, 'UPDATE test SET x = -66 WHERE y = 66') +run(c2, 'INSERT INTO test VALUES (66, 66)') +run(c2, 'DELETE FROM test WHERE y = -66') +query(c2, 'SELECT * FROM test') + diff --git a/sql/test/Users/Tests/grantAndRevokeUserLogedIN.Bug-3476.stable.err b/sql/test/Users/Tests/grantAndRevokeUserLogedIN.Bug-3476.stable.err new file mode 100644 --- /dev/null +++ b/sql/test/Users/Tests/grantAndRevokeUserLogedIN.Bug-3476.stable.err @@ -0,0 +1,50 @@ +stderr of test 'grantAndRevokeUserLogedIN` in directory 'sql/test/Users` itself: + + +# 10:42:58 > +# 10:42:58 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" "mapi_open=true" "--set" "mapi_port=33978" "--set" "mapi_usock=/var/tmp/mtest-2062/.s.monetdb.33978" "--set" "monet_prompt=" "--forcemito" "--set" "mal_listing=2" "--dbpath=/home/vera/Desktop/MonetDB/installation/var/MonetDB/mTests_sql_test_Users" "--set" "mal_listing=0" "--set" "embedded_r=yes" +# 10:42:58 > + +# builtin opt gdk_dbpath = /home/vera/Desktop/MonetDB/installation/var/monetdb5/dbfarm/demo +# builtin opt gdk_debug = 0 +# builtin opt gdk_vmtrim = no +# builtin opt monet_prompt = > +# builtin opt monet_daemon = no +# builtin opt mapi_port = 50000 +# builtin opt mapi_open = false +# builtin opt mapi_autosense = false +# builtin opt sql_optimizer = default_pipe +# builtin opt sql_debug = 0 +# cmdline opt gdk_nr_threads = 0 +# cmdline opt mapi_open = true +# cmdline opt mapi_port = 33978 +# cmdline opt mapi_usock = /var/tmp/mtest-2062/.s.monetdb.33978 +# cmdline opt monet_prompt = +# cmdline opt mal_listing = 2 +# cmdline opt gdk_dbpath = /home/vera/Desktop/MonetDB/installation/var/MonetDB/mTests_sql_test_Users +# cmdline opt mal_listing = 0 +# cmdline opt embedded_r = yes +# cmdline opt gdk_debug = 536870922 + +# 10:42:59 > +# 10:42:59 > "/usr/bin/python2" "grantAndRevokeUserLogedIN.SQL.py" "grantAndRevokeUserLogedIN" +# 10:42:59 > + +Traceback (most recent call last): + File "grantAndRevokeUserLogedIN.SQL.py", line 39, in <module> + run(c2, 'UPDATE test SET x = -66 WHERE y = 66') + File "grantAndRevokeUserLogedIN.SQL.py", line 26, in run + r = conn.execute(sql) + File "/home/vera/Desktop/MonetDB/installation/lib/python2.7/site-packages/monetdb/sql/connections.py", line 127, in execute + return self.command('s' + query + '\n;') + File "/home/vera/Desktop/MonetDB/installation/lib/python2.7/site-packages/monetdb/sql/connections.py", line 132, in command + return self.mapi.cmd(command) + File "/home/vera/Desktop/MonetDB/installation/lib/python2.7/site-packages/monetdb/mapi.py", line 178, in cmd + raise OperationalError(response[1:]) +monetdb.exceptions.OperationalError: UPDATE: insufficient privileges for user 'new_user' to update table 'test' on column 'x' + + +# 10:42:59 > +# 10:42:59 > "Done." +# 10:42:59 > + diff --git a/sql/test/Users/Tests/grantAndRevokeUserLogedIN.Bug-3476.stable.out b/sql/test/Users/Tests/grantAndRevokeUserLogedIN.Bug-3476.stable.out new file mode 100644 --- /dev/null +++ b/sql/test/Users/Tests/grantAndRevokeUserLogedIN.Bug-3476.stable.out @@ -0,0 +1,107 @@ +stdout of test 'grantAndRevokeUserLogedIN` in directory 'sql/test/Users` itself: + + +# 10:44:33 > +# 10:44:33 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" "mapi_open=true" "--set" "mapi_port=39798" "--set" "mapi_usock=/var/tmp/mtest-2273/.s.monetdb.39798" "--set" "monet_prompt=" "--forcemito" "--set" "mal_listing=2" "--dbpath=/home/vera/Desktop/MonetDB/installation/var/MonetDB/mTests_sql_test_Users" "--set" "mal_listing=0" "--set" "embedded_r=yes" +# 10:44:33 > + +# MonetDB 5 server v11.22.0 +# This is an unreleased version +# Serving database 'mTests_sql_test_Users', using 8 threads +# Compiled for x86_64-unknown-linux-gnu/64bit with 64bit OIDs and 128bit integers dynamically linked +# Found 3.746 GiB available main-memory. +# Copyright (c) 1993-July 2008 CWI. +# Copyright (c) August 2008-2015 MonetDB B.V., all rights reserved +# Visit http://www.monetdb.org/ for further information +# Listening for connection requests on mapi:monetdb://buzu:39798/ +# Listening for UNIX domain connection requests on mapi:monetdb:///var/tmp/mtest-2273/.s.monetdb.39798 +# Start processing logs sql/sql_logs version 52200 +# Finished processing logs sql/sql_logs +# MonetDB/SQL module loaded +# MonetDB/R module loaded + +Ready. +# SQL catalog created, loading sql scripts once +# loading sql script: 09_like.sql +# loading sql script: 10_math.sql +# loading sql script: 11_times.sql +# loading sql script: 12_url.sql +# loading sql script: 13_date.sql +# loading sql script: 14_inet.sql +# loading sql script: 15_querylog.sql +# loading sql script: 16_tracelog.sql +# loading sql script: 17_temporal.sql +# loading sql script: 20_vacuum.sql +# loading sql script: 21_dependency_functions.sql +# loading sql script: 22_clients.sql +# loading sql script: 23_skyserver.sql +# loading sql script: 24_zorder.sql +# loading sql script: 25_debug.sql +# loading sql script: 26_sysmon.sql +# loading sql script: 27_rejects.sql +# loading sql script: 39_analytics.sql +# loading sql script: 39_analytics_hge.sql +# loading sql script: 40_json.sql +# loading sql script: 40_json_hge.sql +# loading sql script: 41_md5sum.sql +# loading sql script: 45_uuid.sql +# loading sql script: 51_sys_schema_extension.sql +# loading sql script: 75_storagemodel.sql +# loading sql script: 80_statistics.sql +# loading sql script: 80_udf.sql +# loading sql script: 80_udf_hge.sql +# loading sql script: 90_generator.sql +# loading sql script: 90_generator_hge.sql +# loading sql script: 99_system.sql + +# 10:44:34 > +# 10:44:34 > "/usr/bin/python2" "grantAndRevokeUserLogedIN.SQL.py" "grantAndRevokeUserLogedIN" +# 10:44:34 > + +CREATE SCHEMA new_schema_as_well +&3 + +SET SCHEMA new_schema_as_well +&4 t + +CREATE TABLE test (x int, y int) +&3 + +INSERT INTO test VALUES (-1, -1) +&2 1 -1 + +CREATE USER new_user WITH PASSWORD 'new_quite_long_password' NAME 'newUser' SCHEMA new_schema_as_well +&3 + +GRANT SELECT ON new_schema_as_well.test TO new_user +&3 + +GRANT UPDATE ON new_schema_as_well.test TO new_user +&3 + +GRANT INSERT ON new_schema_as_well.test TO new_user +&3 + +GRANT DELETE ON new_schema_as_well.test TO new_user +&3 + +SELECT * FROM test +[(-1, -1)] +UPDATE test SET x = -3 WHERE y = -1 +&2 1 -1 + +INSERT INTO test VALUES (0, 0) +&2 1 -1 + +DELETE FROM test WHERE y = -2 +&2 0 -1 + +REVOKE SELECT ON new_schema_as_well.test FROM new_user +&3 + +UPDATE test SET x = -66 WHERE y = 66 + +# 10:44:34 > +# 10:44:34 > "Done." +# 10:44:34 > + _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list