2013-05-21 4 views
11

J'ai une base de données MySQL et j'ai plusieurs tables dedans. Un, bien sûr, est la table des utilisateurs pour stocker le nom d'utilisateur et les mots de passe (qui a également le reste de leurs informations). Pour toutes les tables du schéma, je veux pouvoir accorder aux utilisateurs (ou groupes) la permission d'accéder à des champs individuels. Peut-être qu'un exemple aidera:Accorder des permissions à des champs individuels dans MySQL

Il ya une table appelée ACCOUNTS. Dans ce tableau, l'utilisateur remplit (et tient à jour) toutes les données concernant son entreprise (nom, adresse, POC, etc.). Mais je veux aussi avoir des champs attachés à cette table qui sont lus seulement pour ces utilisateurs, tels que LastPaymentDate (ils ne peuvent pas les changer!). De plus, parmi ces utilisateurs, les autorisations diffèrent. Par exemple, l'administrateur/super-utilisateur peut changer le nom et l'adresse de l'entreprise, mais pas les utilisateurs standard.

Je pense que cela pourrait être fait en faisant plusieurs vues pour la table, une pour chaque niveau de permission (groupe). Je suis relativement nouveau à MySQL, donc je ne sais pas si c'est le meilleur moyen. Je peux également voir une table de recherche qui indique quels champs sont autorisés à voir/éditer. Ma première pensée était d'inclure dans les commentaires (ou le nom du champ) une valeur de 0 à 5, puis l'utilisateur aurait un niveau d'autorisation (0-ne voit pas; 1-Lecture seulement; 2-Lecture-écriture; 3- (non utilisé); 4- (non utilisé); 5-Modifier/Supprimer le champ lui-même

Toutes les suggestions? Vues? Tableau de recherche pour déterminer les champs à afficher? Encore une fois, il « d pas pour la table entière, pour chaque colonne dans une table

Répondre

23

Vous pouvez accorder les droits aux colonnes individuelles à un utilisateur, en utilisant ce code:.

GRANT SELECT (col1), INSERT (col1,col2) ON mydb.mytbl TO 'someuser'@'somehost'; 

Exemple tiré ici:

http://dev.mysql.com/doc/refman/5.1/en/grant.html

En outre il n'y a pas de soutien pour les groupes d'utilisateurs ou RÔLES SQL (qui sont des groupes de privilèges) dans MySQL.

+0

Je vais lire ce lien dans une minute, mais si je comprends bien l'exemple, cela permettra à la capacité de sélectionner (ou de voir) col1, et la possibilité d'ajouter des valeurs à (col1, col2)? Je vais écrire PHP pour créer des pages à la volée pour les utilisateurs, et je veux faire du code PHP qui va déterminer si l'utilisateur a) ne peut pas voir le champ, b) l'obtient comme une colonne en lecture seule, ou c) obtient un accès en lecture/écriture. Je suppose que je cherche comment garder une liste de niveaux d'accès pour chaque champ. – Tanoshimi

+0

@Tanoshimi Les autorisations sont stockées dans la base de données mysql: columns_priv, db et les tables hôtes. En les utilisant, vous pourrez résoudre votre tâche. Peut-être, vous aurez plus de questions. – user4035

+0

Je suppose que la seule question que j'ai est que je peux lire les permissions. Fondamentalement, je veux avoir "caché" "lecture seule" et "écrire". Quand PHP construit la page, je veux les utiliser pour déterminer si je n'affiche rien, b) l'affiche sous forme de texte, ou c) l'affiche sous forme de zone de texte avec du code pour mettre à jour la table. Je sais que je peux utiliser USAGE pour None, mais je suppose que je me demande simplement si je peux lire ceux-ci au moment de la création de la page. – Tanoshimi

Questions connexes