Avatar billede Lasse Novice
14. august 2000 - 16:58 Der er 25 kommentarer og
2 løsninger

tabellers versus kolonners rettigheder

Simpelt spørgsmål:

hvordan giver man en bruger rettigheder til eks KUN 3 ud af 4 kolonner fra en tabel?

Avatar billede Lasse Novice
14. august 2000 - 16:59 #1
jeg accepterer IKKE svaret - det kan man ikke!
Avatar billede chruker Nybegynder
14. august 2000 - 17:32 #2
Læs kapitel 6.6 i MySQL manualen. Der står der hvordan db, host, user, tables_priv og columns_priv tabellerne virker.
Avatar billede Lasse Novice
14. august 2000 - 17:34 #3
jeg har læst det, men har ikke fundet noget entydigt svar...
Avatar billede poet Nybegynder
14. august 2000 - 19:33 #4
Lytter med...
Avatar billede chruker Nybegynder
15. august 2000 - 02:05 #5
Lad os sige at vi i tabellen columns_priv har følgende rækker:
host = %
db = gooky1
user = gooky
table_name = table1
column_name = kolonne1
column_priv = \'Select\', \'Insert\', \'Update\'

host = %
db = gooky1
user = gooky
table_name = table1
column_name = kolonne2
column_priv = \'Select\', \'Insert\'

host = %
db = gooky1
user = gooky
table_name = table1
column_name = kolonne3
column_priv = \'Select\'

host = %
db = gooky1
user = gooky
table_name = table1
column_name = kolonne4
column_priv = null


Det hele kan foregå fra hvilken som helst host, med mindre adgang er begrænset af db, host eller user tabellen. De fire privilegie definitioner gælder for bruger gooky, i forbindelse med tabellen table1 i databasen
gooky1.

- Til kolonne 1 har brugeren rettigheder til at kører SELECT, INSERT og UPDATE kommandoer.
- Til kolonne 2 har brugeren rettigheder til at kører SELECT og INSERT kommandoer.
- På kolonne 3 kan brugeren kun kører SELECT kommandoer.
- Og kolonne 4 har brugeren overhovedet ikke rettigheder til.
Avatar billede Lasse Novice
15. august 2000 - 10:12 #6
hvis det nu kun er forbindelsen fra localhost der skal have adgang så skal man istedet for % skrive localhost, ik sandt?
Avatar billede Lasse Novice
15. august 2000 - 10:26 #7
ja, det der som du lige har beskrevet oven over, var også det jeg var kommet frem til selv. MEN. det virker ikke....

jeg husker selvfølgelig at flushe rettighederne, så det er ikke der problemet er...
Avatar billede Lasse Novice
15. august 2000 - 10:45 #8
OK, for at tage det helt fra bunden.
Jeg har en bruger kaldet baren, der skal have adgang til en database kaldet herlevkollegiet.

I den database ligger der ca 10 tabeller, men han skal KUN have adgang til tabellen bardatoer, samt 2 kolonner fra tabellen person. Jeg har lavet følgende SQL sætninger:
OPRET BRUGER:
insert into user values(\'localhost\',\'baren\',PASSWORD(\"skidegodt\"),\'N\',\'N\',\'N\',\'N\',\'N\',\'N\',\'N\',\'N\',\'N\',\'N\',\'N\',\'N\',\'N\',\'N\');

OPRET ADGANG TIL DATABASEN
insert into db values(\'localhost\',\'herlevkollegiet\',\'baren,\'N\',\'N\',\'N\',\'N\',\'N\',\'N\',\'N\',\'N\',\'N\',\'N\');

OPRET ADGANG TIL TABELLEN BARDATOER:
insert into tables_priv(host,db,user,table_name,grantor,table_priv,column_priv) values(\'localhost\',\'herlevkollegiet\',\'baren\',\'bardatoer\',\'root@localroot\',15,15);

OPRET ADGANG TIL 2 KOLONNER FRA TABELLEN PERSON:
insert into columns_priv(host,db,user,table_name,column_name,column_priv) values(\'localhost\',\'herlevkollegiet\',\'baren\',\'person\',\'fornavn\',15),(\'localhost\',\'herlevkollegiet\',\'baren\',\'person\',\'efternavn\',15),(\'localhost\',\'herlevkollegiet\',\'baren\',\'person\',\'gammeladresseID\',0),,(\'localhost\',\'herlevkollegiet\',\'baren\',\'person\',\'foedt\',0),(\'localhost\',\'herlevkollegiet\',\'baren\',\'person\',\'vaerelsenr\',0),(\'localhost\',\'herlevkollegiet\',\'baren\',\'person\',\'ind\',0),(\'localhost\',\'herlevkollegiet\',\'baren\',\'person\',\'ud\',0),(\'localhost\',\'herlevkollegiet\',\'baren\',\'person\',\'behandlet\',0),(\'localhost\',\'herlevkollegiet\',\'baren\',\'person\',\'uddannelseID\',0);

Med dette skrevet så kan jeg IKKE se tabellen person. Jeg har sørget for at give alle(altså alle de kolonner der i tabellen) kolonnerne deres specifikke rettigheder(også selvom de ikke skal have nogen, hvilket jo er default) i tabellen person.

Der er noget jeg er usikker på og det er grantor i tabellen tables_priv. Jeg ved ikke om det kan give udslaget.


Avatar billede stoffer Nybegynder
15. august 2000 - 11:08 #9
hmmm du kan vel bruge grant:
------------------------------------------------------
Grant Select On dbo.tabelnavn(kolonne) To public
Go
------------------------------------------------------

forklaring: Grant Select --> her kan du grante enten update, delete eller select
            To public --> her kan skrive hvem der har adgang til den indstilling du lige        lavede      (i dit tilfælde \'baren\').

Jeg håber det virker, men jeg er ikke sikker da jeg ikke kender meget til mySQL, men SQL\'en burde være det samme.

håber det virker :)
Avatar billede Lasse Novice
15. august 2000 - 11:24 #10
nope, det virker ikke, den kommer med en SQL fejl nær (fornavn,efternavn) også er den ikke længere....

hmmm, jeg har et link. Jeg kan bare ikke lige tyde hvordan de gør:
http://www.mysql.com/documentation/manual.php?section=GRANT

i ca. 15 linie står der med fed Column level.
Avatar billede Lasse Novice
15. august 2000 - 11:26 #11
ok, jeg sætter point tallet op til det dobbelte: 500 point til den der finder svaret.
Avatar billede Lasse Novice
15. august 2000 - 11:29 #12
Dette er det jeg skrev:
grant select on herlevkollegiet.person(fornavn,efternavn) to \'baren\';
Avatar billede stoffer Nybegynder
15. august 2000 - 13:49 #13
Her er et par idéer

grant select on person.herlevkollegiet(fornavn,efternavn) to \'baren\';


grant select on fornavn.person.herlevkollegietto \'baren\'; 

har du også tjekket dette link:

http://www.mysql.com/documentation/manual.php3?section=Adding_users
Avatar billede Lasse Novice
15. august 2000 - 13:58 #14
ingen af dem virker, og jeg har desværre tjekket den side. Der står ikke noget om kolonne rettigheder - kun om bruger rettigheder.
Avatar billede stoffer Nybegynder
15. august 2000 - 14:03 #15
grant select on person.herlevkollegiet.fornavn to baren;

grant select on person.herlevkollegiet.fornavn to \'baren\';

grant select on person.herlevkollegiet(fornavn,efternavn) to baren;


tjah.... så må jeg også været løbet tør for idéer --> men jeg tror at det er tæt på.

Ellers kan du jo skifte til MSSQL :)

Avatar billede Lasse Novice
15. august 2000 - 14:08 #16
hmmm, heller ingen bonus der...

bortset fra det, så regner jeg med at du mener: herlevkollegiet.person.fornavn ...

ja, det kunne jo være at jeg skulle gøre det, men det er lidt besværligt når man i forvejen har en masse data liggende der, samt en masse script der tager kontakt til den database.... men det var nu ikke et dumt svar... hmmm
Avatar billede stoffer Nybegynder
15. august 2000 - 14:16 #17
næææ jeg er ikke sikker på at database navnet skal stå først.

Hvis man ser på det link du pastede så står tabel-navn rent faktisk først..

GRANT priv_type [(column_list)] [, priv_type [(column_list)] ...]
    ON {tbl_name | * | *.* | db_name.*}
    TO user_name [IDENTIFIED BY \'password\']
        [, user_name [IDENTIFIED BY \'password\'] ...]
    [WITH GRANT OPTION]

her er et par idéer, prøv at vende den

GRANT SELECT (fornavn), SELECT (efternavn)
    ON {person.herlevkollegiet}
    TO baren


GRANT SELECT (fornavn), SELECT (efternavn)
    ON person.herlevkollegiet
    TO baren

tjahhh........
Avatar billede Lasse Novice
16. august 2000 - 00:41 #18
stoffer>>
hmm, nope....

ang. om tbl_name står først: ja, det gør det, men det står som en faktor i et logisk udtryk... det vil sige at man enten(OR=|) kan skrive:
tabelnavn(tbl_name) eller
* (alle tabeller)eller
*.* (alle tabeller i alle databaser) eller
databasenavn.tabelnavn (db_name.*)

men det er ikke det der skal skille os ad. Jeg har selvfølgelig også prøvet på din måde, men der kommer en fejl om at der ikke eksisterer tabellen person.herlevkollegiet. Det gør der ikke i min. Men alligevel virker det ikke.

hmmm, det er noget mærkeligt noget...

by the way, kender du jon, thøger(anders) og det der slæng? Hvis du gør, så kan du sikkert huske mig, det er Lasse(jons ven)
Avatar billede Lasse Novice
16. august 2000 - 00:43 #19
men det er helt sikkert tættere på sandheden end de tidligere forslag... jeg tror at det muligvis er en fejl i Mysql. Det begrunder jeg med at den skriver i de rigtige tabeller. Jeg tror jeg opgraderer til en ny version også vender jeg tilbage....

Avatar billede stoffer Nybegynder
16. august 2000 - 10:42 #20
Jep jeg kender Jon og slænget fint :) og jeg kan fint huske dig. Du er på herlevkollegiet kan jeg regne ud. Har du eget firma ved siden af?
Avatar billede stoffer Nybegynder
16. august 2000 - 10:47 #21
ja, det var også mere for at forsøge noget ny der gjorde at jeg byttede om på tabel og dbnavn, i både i Access og MSSQL er det som du siger...
Avatar billede stoffer Nybegynder
16. august 2000 - 10:48 #22
Nåh men du må hellere selv hapse dine point siden det ikke kom til at virke, håber det lykkedes for dig, jeg er løbet tør for ideer
Avatar billede Lasse Novice
16. august 2000 - 10:51 #23
jeg tror lige jeg installerer en ny version af mysql, også må vi se hvad resultatet er...

nope intet ved siden af, men starter her pr. 1/9 hos DR
Avatar billede Lasse Novice
23. august 2000 - 23:14 #24
hmmm til alle jer der har forsøgt - ØV

stoffer>> har lige installeret en ny version, men det virker ej heller... PIS

Hmmm, DR gik ikke. Det er blevet til mobilix istedet for.
Avatar billede Lasse Novice
23. august 2000 - 23:47 #25
hfehgeui
<br>
frefw>
<br>

testing
Avatar billede stoffer Nybegynder
24. august 2000 - 10:32 #26
OK, kunne du så ikke skaffe rabatter på min tlf. regning - den er lidt uhyggelig....

håber du kommer op til Jon engang og tyller lidt pils :)
Avatar billede Lasse Novice
24. august 2000 - 11:46 #27
ja, det må vi lige arrangere.... altså det med pils.

Det andet kan jeg ikke udtale mig om :-)
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