Avatar billede jogii Nybegynder
18. september 2012 - 09:22 Der er 1 kommentar og
1 løsning

Stored Procedures og sikkerhed (GRANT)

Kort fortalt, kan jeg GRANTe EXECUTE-adgang for én bruger til alle udvalgte sprocs med 'db.pub_%' ?

Længere forklaring:

Jeg er ved at oprette et system, hvor jeg har lavet 2 sæt sproc, private og offentlige.

Meningen er at udefra kalder man med en brugerID, som kun, og kun, har adgang til de offentlige sprocs.
De offentlige sprocs foretager noget grundlæggende validering (datoer og standardværdier), kalder evt. en log, og kalder så de private sprocs.

Jeg sætter DEFINER på alle sprocs til en data-bruger, som har adgang til at rette CRUD alle relevante tabeller samt Execute på hele databasen.

Men denne her specielle bruger, som må bruges til kald udefra, vil jeg ikke give adgang til data. Al tilgang skal foregå via sprocs.

Det virker sådan set fint. Alle interne sprocs har jeg prefixet med 'core_', mens public sprocs hedder de de hedder.

Mit spørgsmål går ud på, hvordan jeg bedst styrer adgang til de offentlige sprocs. Hvis jeg omdøbte alle offentlige sprocs til at have et præfix, f.eks. 'pub_', kunne jeg så GRANTe EXECUTE-adgang for denne bruger til alle sprocs med 'db.pub_%' ?
Avatar billede jogii Nybegynder
18. september 2012 - 09:57 #1
Mest af alt kan jeg se mit spørgsmål omhandler brugen af wildcards/jokertegn.

Her er forskelligt fra dokumentationen, hvor der henvises til forskellige anvendelser af wildcards.

Tilsyneladende er _ og % brugbar for databasedelen, og * for databaseobjekter. Er der nogen der kan belyse det nærmere?




The "_" and "%" wildcards are allowed when specifying database names in GRANT statements that grant privileges at the global or database levels. This means, for example, that if you want to use a "_" character as part of a database name, you should specify it as "\_" in the GRANT statement, to prevent the user from being able to access additional databases matching the wildcard pattern; for example, GRANT ... ON `foo\_bar`.* TO ....

To accommodate granting rights to users from arbitrary hosts, MySQL supports specifying the user value in the form user_name@host_name. If a user_name or host_name value is legal as an unquoted identifier, you need not quote it. However, quotes are necessary to specify a user_name string containing special characters (such as "-"), or a host_name string containing special characters or wildcard characters (such as "%"); for example, 'test-user'@'test-hostname'. Quote the username and hostname separately.

You can specify wildcards in the hostname. For example, user_name@'%.loc.gov' applies to user_name for any host in the loc.gov domain, and user_name@'144.155.166.%' applies to user_name for any host in the 144.155.166 class C subnet.

The simple form user_name is a synonym for user_name@'%'.

MySQL does not support wildcards in usernames. Anonymous users are defined by inserting entries with User='' into the mysql.user table or by creating a user with an empty name with the GRANT statement:
Avatar billede jogii Nybegynder
18. september 2012 - 11:53 #2
Ok, tror jeg har fundet svar.

http://stackoverflow.com/questions/1489427/can-wildcards-be-used-on-tablenames-for-a-grant-in-mysql

På objektniveau er det alle eller en. * bruges for alle.

Wildcards _ og % kan kun bruges på database-niveau.

Håber der kommer en løsning på det på et tidspunkt.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester