Changeset: 85ea3faf5d24 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=85ea3faf5d24
Modified Files:
        sql/test/Users/Tests/view_privs.SQL.py
Branch: default
Log Message:

Extended the VIEW access tests to check that GRANT SELECT on <view> also works
properly on individual columns of a view


diffs (52 lines):

diff --git a/sql/test/Users/Tests/view_privs.SQL.py 
b/sql/test/Users/Tests/view_privs.SQL.py
--- a/sql/test/Users/Tests/view_privs.SQL.py
+++ b/sql/test/Users/Tests/view_privs.SQL.py
@@ -1,6 +1,7 @@
 ###
 # Check indirect VIEW privilege:
 #   A user with only(!) SELECT privilege on VIEWs of tables can use the VIEWs.
+#   A user can view the columns of a VIEW to which it has been granted access.
 # Check that if a user has CREATE VIEW privilege in one schema (i.e. is an
 #   schema owner) but not in another schema, then the user can CREATE VIEWs
 #   on tables in this schema but not in the other schema.
@@ -27,7 +28,6 @@ with SQLTestCase() as mdb:
     mdb.execute("SELECT * FROM 
your_view;").assertSucceeded().assertDataResultMatch([('alice', 1980, 
'********A'), ('bob', 1970, '********0')])
     # grant indirect view right to my_user
     mdb.execute("GRANT SELECT on your_view to my_user;").assertSucceeded()
-    mdb.execute("SET SCHEMA sys;").assertSucceeded()
 
 
     with SQLTestCase() as tc:
@@ -47,11 +47,28 @@ with SQLTestCase() as mdb:
         # my_user cannot create VIEWs on your_table
         tc.execute("CREATE VIEW your_view AS SELECT * FROM 
your_schema.your_table;").assertFailed(err_code="42000", err_message="SELECT: 
access denied for my_user to table 'your_schema.your_table'")
 
+        # Check that we can revoke select from a whole view, but regrant select
+        #   on some columns of the view
+        mdb.execute("REVOKE SELECT on your_view FROM 
my_user;").assertSucceeded()
+        tc.execute("SELECT * FROM your_schema.your_view;")\
+            .assertFailed(err_code="42000", err_message="SELECT: access denied 
for my_user to view 'your_schema.your_view'")
+        mdb.execute("GRANT SELECT (name) on your_view to 
my_user;").assertSucceeded()
+        tc.execute("SELECT name FROM 
your_schema.your_view;").assertSucceeded()\
+            .assertDataResultMatch([('alice',), ('bob',)])
+        tc.execute("SELECT * FROM your_schema.your_view;").assertSucceeded()\
+            .assertDataResultMatch([('alice',), ('bob',)])
+        mdb.execute("GRANT SELECT (ssn) on your_view to 
my_user;").assertSucceeded()
+        tc.execute("SELECT name, ssn FROM 
your_schema.your_view;").assertSucceeded()\
+            .assertDataResultMatch([('alice', '********A'), ('bob', 
'********0')])
+        tc.execute("SELECT * FROM your_schema.your_view;").assertSucceeded()\
+            .assertDataResultMatch([('alice', '********A'), ('bob', 
'********0')])
+        tc.execute("SELECT yr FROM your_schema.your_view;")\
+            .assertFailed(err_code="42000", err_message="SELECT: identifier 
'yr' unknown")
+
         # clean up
-        mdb.execute("DROP VIEW your_schema.your_view;").assertSucceeded()
-        mdb.execute("DROP TABLE your_schema.your_table;").assertSucceeded()
+        mdb.execute("SET SCHEMA sys;").assertSucceeded()
         mdb.execute("DROP USER my_user;").assertSucceeded()
         mdb.execute("DROP ROLE my_role;").assertSucceeded()
-        mdb.execute("DROP SCHEMA my_schema;").assertSucceeded()
-        mdb.execute("DROP SCHEMA your_schema;").assertSucceeded()
+        mdb.execute("DROP SCHEMA my_schema CASCADE;").assertSucceeded()
+        mdb.execute("DROP SCHEMA your_schema CASCADE;").assertSucceeded()
 
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to