Skip to content
This repository has been archived by the owner on Jan 28, 2021. It is now read-only.

Commit

Permalink
Dropping the pretense of public queries in mysql
Browse files Browse the repository at this point in the history
  • Loading branch information
vegitron committed Jun 30, 2015
1 parent 4939fb9 commit ff0d2af
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 22 deletions.
11 changes: 7 additions & 4 deletions sqlshare_rest/backend/mysql.py
Original file line number Diff line number Diff line change
Expand Up @@ -145,8 +145,10 @@ def _add_public_access_sql(self, dataset, owner):
public_user.db_username)

def add_public_access(self, dataset, owner):
sql = self._add_public_access_sql(dataset, owner)
self.run_query(sql, owner)
return
# Dropping "public" access, since mysql doesn't have a public role
# sql = self._add_public_access_sql(dataset, owner)
# self.run_query(sql, owner)

def _remove_public_access_sql(self, dataset, owner):
public_user = self.get_public_user()
Expand All @@ -155,8 +157,9 @@ def _remove_public_access_sql(self, dataset, owner):
public_user.db_username)

def remove_public_access(self, dataset, owner):
sql = self._remove_public_access_sql(dataset, owner)
self.run_query(sql, owner)
return
# sql = self._remove_public_access_sql(dataset, owner)
# self.run_query(sql, owner)

def get_query_cache_db_name(self):
return getattr(settings, "SQLSHARE_QUERY_CACHE_DB", "ss_query_db")
Expand Down
36 changes: 18 additions & 18 deletions sqlshare_rest/test/backend/mysql.py
Original file line number Diff line number Diff line change
Expand Up @@ -397,43 +397,43 @@ def test_public_datasets(self):
backend.create_dataset_from_parser("share_me", parser, ul, user1)
backend.create_dataset_from_parser("dont_share_me", parser2, ul, user1)
# Not shared yet - no access
self.assertRaises(OperationalError, backend.run_query, "SELECT * FROM `test_user_public_grant1`.`share_me`", user2)
#self.assertRaises(OperationalError, backend.run_query, "SELECT * FROM `test_user_public_grant1`.`share_me`", user2)

# Make sure the public query can't access it yet
self.assertRaises(OperationalError, backend.run_public_query, "SELECT * FROM `test_user_public_grant1`.`share_me`")
#self.assertRaises(OperationalError, backend.run_public_query, "SELECT * FROM `test_user_public_grant1`.`share_me`")

# Make sure some rando can't add public access
self.assertRaises(InternalError, backend.remove_public_access, "share_me", user2)
self.assertRaises(OperationalError, backend.run_public_query, "SELECT * FROM `test_user_public_grant1`.`share_me`")
#self.assertRaises(InternalError, backend.remove_public_access, "share_me", user2)
#self.assertRaises(OperationalError, backend.run_public_query, "SELECT * FROM `test_user_public_grant1`.`share_me`")

backend.add_public_access("share_me", user1)
#backend.add_public_access("share_me", user1)

# Running it as the user will still be an error - can't grant wildcard user access
self.assertRaises(OperationalError, backend.run_query, "SELECT * FROM `test_user_public_grant1`.`share_me`", user2)
#self.assertRaises(OperationalError, backend.run_query, "SELECT * FROM `test_user_public_grant1`.`share_me`", user2)

# But the public query will work
result = backend.run_public_query("SELECT * FROM `test_user_public_grant1`.`share_me`")
self.assertEquals(((1, 3, 4, ), (2, 10, 12, )), result)
#result = backend.run_public_query("SELECT * FROM `test_user_public_grant1`.`share_me`")
#self.assertEquals(((1, 3, 4, ), (2, 10, 12, )), result)

# Make sure a query unioning the public with non-public datasets fails
self.assertRaises(OperationalError, backend.run_public_query, "SELECT * FROM `test_user_public_grant1`.`share_me` LEFT JOIN `test_user_public_grant1`.`dont_share_me` ON A = D")
#self.assertRaises(OperationalError, backend.run_public_query, "SELECT * FROM `test_user_public_grant1`.`share_me` LEFT JOIN `test_user_public_grant1`.`dont_share_me` ON A = D")

# Make sure this query actually works!
result = backend.run_query("SELECT * FROM `test_user_public_grant1`.`share_me` LEFT JOIN `test_user_public_grant1`.`dont_share_me` ON A = D", user1)
self.assertEquals(((1, 3, 4, 1, 3, 4,), (2, 10, 12, 2, 10, 12,)), result)
#result = backend.run_query("SELECT * FROM `test_user_public_grant1`.`share_me` LEFT JOIN `test_user_public_grant1`.`dont_share_me` ON A = D", user1)
#self.assertEquals(((1, 3, 4, 1, 3, 4,), (2, 10, 12, 2, 10, 12,)), result)

# Make sure some rando can't remove public access
self.assertRaises(InternalError, backend.remove_public_access, "share_me", user2)
result = backend.run_public_query("SELECT * FROM `test_user_public_grant1`.`share_me`")
self.assertEquals(((1, 3, 4, ), (2, 10, 12, )), result)
#self.assertRaises(InternalError, backend.remove_public_access, "share_me", user2)
#result = backend.run_public_query("SELECT * FROM `test_user_public_grant1`.`share_me`")
#self.assertEquals(((1, 3, 4, ), (2, 10, 12, )), result)

# OK, remove access.
backend.remove_public_access("share_me", user1)
self.assertRaises(OperationalError, backend.run_public_query, "SELECT * FROM `test_user_public_grant1`.`share_me`")
#/backend.remove_public_access("share_me", user1)
#self.assertRaises(OperationalError, backend.run_public_query, "SELECT * FROM `test_user_public_grant1`.`share_me`")

# make sure the owner has access still
result = backend.run_query("SELECT * FROM `test_user_public_grant1`.`share_me`", user1)
self.assertEquals(((1, 3, 4, ), (2, 10, 12, )), result)
#result = backend.run_query("SELECT * FROM `test_user_public_grant1`.`share_me`", user1)
#self.assertEquals(((1, 3, 4, ), (2, 10, 12, )), result)

except Exception:
raise
Expand Down

0 comments on commit ff0d2af

Please sign in to comment.