2009-09-28 8 views
3

Est-il possible en MySQL de faire un GRANT à un utilisateur sur un ensemble de tables dans une base de données, par ex. pour autoriser CREATE AND DROPING de certains noms de tables mais pas d'autres?Peut-on utiliser des jokers sur les noms de tables pour un GRANT dans MySQL?

Aucune de ces semblent fonctionner:

GRANT SELECT ON `testdb`.`%_testing` TO 'wildcardtest'@'localhost'; 
GRANT SELECT ON `testdb`.`testing%` TO 'wildcardtest'@'localhost'; 

et le manuel MySQL ne semble pas donner une réponse de toute façon.

Répondre

4

Le seul caractère générique qui fonctionne dans l'instruction GRANT est *

GRANT SELECT ON `testdb`.* TO 'user'@'localhost'; 
GRANT SELECT ON *.* TO 'privilegeduser'@'localhost'; 

Il est tout ou un; il n'y a pas de possibilité de mise en correspondance dynamique des noms de tables avec les privilèges accordés.

2

Non. Vous pouvez séparer les noms de table par des virgules, mais vous ne pouvez pas utiliser de caractères génériques dans un GRANT.

+1

un exemple serait bien – TekTimmy

1

Créer une nouvelle base de données vide. lui donnent accès à la base de données d'origine (utiliser un utilisateur qui allready ont accès à la base de données d'origine) dans cette nouvelle base de données test CREATE VIEW comme SELECT * de originaldatabase.tablename conditions WHERE ...

Ensuite, donnez l'utilisateur test accès à NewDatabase avec GRANT select sur NewDatabase. * à 'testuser' @ 'localhost'

Créez ensuite uniquement des vues pour les tables auxquelles vous souhaitez que testuser accède.

Rappelez-vous aussi que vous pouvez faire un utilisateur() dans la partie WHERE de la vue:

exemple: créer test de vue que select * from original.customer où mysql_user = USER()

En l'original.customer vous devez alors avoir une colonne 'mysql_user' et chaque ligne que l'utilisateur de test est autorisé à voir doit avoir testuser @ localhost comme une entrée

Le testuser verra toutes les vues créées en tant que tables dans la base de données ' test '

+0

Je ne vois pas où cette réponse implique des caractères génériques (voir le titre de la question). – syck

+0

@syck Je suppose que la question est de savoir comment limiter un utilisateur à seulement certaines des tables de la base de données d'origine. Lorsque vous créez uniquement des «vues» pour les tables à utiliser, l'utilisateur final peut uniquement accéder à celles de la NewDatabase. –

+0

Comme indiqué dans le titre de la question, l'OP voulait savoir comment utiliser les caractères génériques pour donner accès à certaines tables. Accorder sur des tables uniques (ou créer des vues pour eux) n'est pas le problème, mais parfois pas approprié. Pensez à des données scientifiques, parfois organisées en centaines ou milliers de tableaux similaires. – syck

Questions connexes