web-dev-qa-db-fra.com

Grant SELECT sur toutes les tables dans Redshift

J'essaie d'attribuer le privilège SELECT à un groupe dans Redshift. J'ai donc créé un groupe et un utilisateur dans ce groupe:

CREATE GROUP data_viewers;
CREATE USER <user> PASSWORD '<password>' IN GROUP data_viewers;

Maintenant, je voudrais autoriser ce groupe à pouvoir lire les données de n'importe quelle table:

GRANT SELECT ON ALL TABLES IN SCHEMA PUBLIC TO GROUP data_viewers;

La commande renvoie GRANT. Maintenant, lorsque je me connecte à Redshift en tant que nouvel utilisateur et que je lance SELECT * FROM something.something; Je reçois:

autorisation refusée pour quelque chose de schéma

J'ai essayé d'accorder des autorisations à quelque chose: GRANT SELECT ON ALL TABLES IN SCHEMA something TO GROUP data_viewers; mais cela n'a rien changé.


Comment puis-je autoriser les utilisateurs de mon groupe à SELECT les données de n'importe quelle table du schéma?

9
Salvador Dali

Vous avez besoin du privilège USAGE (au moins) pour le schéma également:

GRANT USAGE ON SCHEMA something TO GROUP data_viewers;

Exemple de Postgres associé:

N'oubliez pas que vous n'avez accordé des autorisations qu'aux tables déjà existantes. Ne s'applique pas aux tables créées ultérieurement. Pour les couvrir également:

ALTER DEFAULT PRIVILEGES FOR USER role_that_creates_tables
IN SCHEMA public
GRANT SELECT ON TABLES TO GROUP data_viewers;

Amazon Redshift implémenté DEFAULT PRIVILEGES également.

Voici un livre de cuisine complet pour Postgres:

Soyez conscient de certaines différences entre PostgreSQL et Redshift! Redshift colle pour séparer utilisateurs et groupes, tandis que Postgres l'a remplacé par le concept universel de rôles:

Et je ne sais pas comment Redshift gère les séquences ...

14
Erwin Brandstetter

J'avais le même besoin d'un utilisateur en lecture seule Redshift. Après avoir lu les documents, je est venu avec un ensemble de requêtes:

-- Create Read-Only Group     
CREATE GROUP ro_group;

-- Create User
CREATE USER ro_user WITH password PASSWORD;

-- Add User to Read-Only Group
ALTER GROUP ro_group ADD USER ro_user;

-- Grant Usage permission to Read-Only Group to specific Schema
GRANT USAGE ON SCHEMA "ro_schema" TO GROUP ro_group;

-- Grant Select permission to Read-Only Group to specific Schema
GRANT SELECT ON ALL TABLES IN SCHEMA "ro_schema" TO GROUP ro_group;

-- Alter Default Privileges to maintain the permissions on new tables
ALTER DEFAULT PRIVILEGES IN SCHEMA "ro_schema" GRANT SELECT ON TABLES TO GROUP ro_group;

-- Revoke CREATE privileges from group
REVOKE CREATE ON SCHEMA "ro_schema" FROM GROUP ro_group;

Si vous souhaitez supprimer l'utilisateur ultérieurement, vous devez à peu près revenir en arrière.

11
Joe Kaire