22. januar 2003 - 10:01Der er
42 kommentarer og 3 løsninger
Lille script der tjekker om....
ER der nogle der kan hjælpe mig med at lave et lille script der connecter til min db, opretter nogle databaser og derefter tjekker om de nu også er oprettet???
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
Jo det kan man godt, du skal tage udgangspunkt i i det link jeg nævnte ovenfor. Det er bare ikke så fedt at lave sine database ændringer fra PHP. Hvis du nu glemmer scriptet et sted, så kan alle med webadgang køre det igen...
Det er imidlertid noget nemmere hvis du kan få en form for adgang hvor du kan lave nogle SQL-scripts der gør det du vil (a' la' create database() osv)
Jeg foretrækker selv mysqlfront (http://www.mysqlfront.de), men det kræver at du har direkte adgang til mysql-server og det lyder det som om du har.
Men hvis du nu poster dit script, har vi jo en chance for at se hvad der er galt. ;-)
Du kan også bare køre mysql klienten fra din shell-prompt: # mysql (så spørger den om brugernavn og pwd)
Og hvis du har lavet et SQL-script kan du køre det med: # mysql -u<brugernavn> -p<password> <databasenavn> < <scriptfil>
Æv, chekkede lige. De har stoppet udviklingen af mysqlfront. Men mon ikke den er til at hente et sted. Min ver. hedder 2.0 og er fra januar sidste år og fungerer upåklageligt.
hvorfor opretter den ikke mine tabeller fra mit script???
det set sådan ud: <?
$conn = mysql_connect("localhost", "figuren_dk", "*******") or die("Could not connect!<br>"); print ("Connected successfully!<br>");
# mysql_query("create database figuren_dk");
mysql_select_db("figuren_dk", $conn);
$tabelSQL = "CREATE TABLE artikler ( id integer not null primary key auto_increment, oprettet datetime not null, kategori varchar(100) not null, under_kat varchar(100) not null, overskrift varchar(100) not null, side_overskrift varchar(100) not null, kort_beskrivelse text not null, indhold text not null, forfatter varchar(100) not null, side_nr varchar(100) not null, antal_sider varchar(100) not null, aktiv int(1) not null )"; mysql_query($tabelSQL);
mysql_close($conn); ?> ####################
jeg tror jeg har lidt problemmer med rettighederne, på db/brugeren... jeg kan ikke connecte via ip adressen på min firewall, den "forwarder" selvfølgelig port 3306... til serverens interne ip...
Ved nærmere eftertanke skal dit script jo udvides med de kommandoer der giver de korrekte rettigheder.
Jeg plejer at gøre det ved at indsætte rækker i mysql/user og mysql/db tabellerne og så flushe privilegs, men man kan også gøre det med et grant statement. Jeg ved bare ikke om man kan det med php, men det kan man jo nok...
Men så skal dit script i virkeligheden køres af en admin (root) databasebruger.
Jeg har forskellige brugere på min linux maskine(den der er MySQL på), og der er så en db med brugerens navn... og der skal KUN gives rettigheder til den bruger hvor brugernavn og db navn er det sammen...
har du nogle shell komandoere hvor jeg kan gøre det?, jeg er root på lokalmaskinen... men har ikke så meget styr på shell komandoerene...
hvordan ændre jeg root's password, så det ikke er "ingenting"?
Linuxbrugerne har ikke noget med det at gøre. mysql-serveren kører som en eller anden bruger og det er det. Det er databasebrugerne der er interessante.
Jeg kan fuldt tilslutte mig din plan om at scriptet opretter en database og en _database_ bruger der kun kan connecte til denne database.
Men hvis scriptet skal køre som denne bruger kan det ikke tildele rettigheder til ting og sager uden at have mere adgang end godt er (navnlig adgang til at tildele rettigheder)
Derfor skal scriptet køres som root-_database_ brugeren. (aldrig som logget ind som root på linuxboxen)
Roots password ændres med mysqladmin:
#mysqladmin -uroot password xxxxx (tror jeg nok, det er længe side ;-) )
det er ikke et php script til at oprette/tildele rettighedder til db, jeg søger... men det ville da være fint, også gør det ikke noget at det skal være root...
kan du lave sådan et, ville det være SUPER, og så kan du da godt få nogle flere point....
Jo, jeg kan da nok finde på noget. Jeg tror noget af vores forvirring opstod af at du fik skrevet noget med at oprette databaser i det oprindelige spørgsmål ;-)
Men faktisk kan du tildele rettigheder ved at indsætte linier i de to tabeller jeg nævnte for et par posts siden..
Men jeg skal lige lidt ordne et par ting, så det bliver først senere..
Jeg blev lige i tvivl om en ting, fordi du nævner noget med en lokal maskine og så den der er mysql på.
Kan du logge ind (har du shell-adgang) på den maskine der kører mysql? (Det må du jo næsten have hvis du kan køre mysqladmin, men lige for at være sikker)..
Så vil jeg nemlig lave det som SQL script. Så er der ikke noget med noget php der kan connecte til databasen som root bruger.
I en scriptfil lægger man bare en masse mysql consol kommandoer. Det kan dels være SQL statements, men der er også en række andre kommandoer såsom:
use <database>; show tables; show fields from <table>; grant <adgangsstreng som jeg ikke lige kan huske men det er den jeg vil finde frem>; flush privileges; (genindlæser de rettigheder man har gemt i de tabeller de styrer rettigheder) optimize table;
Man kan også fyre dem af med mysql_query i php, men det kan være rart at kunne kigge sig omkring vha. mysql-prompten.
Endelig kan du bruge teknikken til at indlæse en tidligere eksporteret database. Eksport:
#mysqldump -u<brugernavn> -p <databasenavn> > dumfil.sql < Efter nogle dage er databasen gået ned og skal genindlæses: > #mysql -u <brugernavn> -p <databasenavn> < dumpfil.sql
Kan du ikke hjælpe mig med at lave GRANT rigtigt...?
Det med sikkerheden, klare jeg med .htaccess så lægger jeg mit super seje top hemmelige bruger/database script, ind bag den mappe, så SKAL der jo logges ind...
ang: #mysql -uroot
####################################
Viracocha:~# mysql -uroot ERROR 1045: Access denied for user: 'root@localhost' (Using password: NO)
####################################
har heller ikke adgang...
har lige prøvet:
####################################
Viracocha:~# mysql -u-proot Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 15 to server version: 3.23.49-log
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
Hvis jeg prøver samme får jeg: $ mysql -u -proot ERROR 1045: Access denied for user: '-proot@localhost' (Using password: NO)
Det kunne tyde på at du logger på som brugeren "-proot"
Prøv at køre: $mysql -uroot -p
Hvis du tænker på hvor nemt det gik galt ved prompten. Så tænk på hvor galt det kan gå hvis du laver en programmeringsfejl, overser noget i dit PHP script, eller hvis du kommer til at taste et forkert brugernavn ind...
Derfor foretrækker jeg altid at lave sådan noget ved først at chekke det rigtigt kommandosæt i prompten, og så lægge det ind i et script der bruger et sprog der ligger så tæt som muligt på det jeg lige har tjekket ved prompten..
Men tilbage til dit GRANT spørgsmål:
F.eks. en bruger (student1) der skal kunne lave select, insert, update, delete, create og drop på sin egen database, men kun skal have adgang fra localhost (altså enten fra shell eller via en webserver på den maskine der kører mysql):
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON student1.* TO student1@localhost IDENTIFIED BY 'et_hemmeligt_password';
Kan du udføre følgende kommandoer når du er logget ind som "-proot" ?:
use mysql; select host, user, password from user;
Hvis du kan skal du naturligvis IKKE poste resultatet!!
Men du vil kunne se hvilke brugere der er oprettet og om de har et password. (selve passwordet er krypteret)
PS! Jeg prøvede lige den du nævner ovenfor (#mysqladmin -uroot password) (i et testmiljø naturligvis) men får at vide at jeg har for få parametre. Er du sikker på du ikke fik angivet et password? Kunne du have kommet til at trykke på en andent tast samtidig med enter? F.eks. * eller ´ ?
Statementet, som jeg har skrevet det, skrives ved mysql-prompten, eller som en string i en mysql_query() som i dit script...
Så hvis du kan logge ind på mysql (faktisk er det mysql-klienten du starter), som du gjorde ovenfor, (#mysql -uroot -p)så kan du skrive i flere linier. Mysql-klienten sender først forespørgslen, når den støder på et semikolon..
Det var det jeg mente da jeg spurgte om hvad du kunne få adgang til når du var logget ind som "-proot":
Viracocha:~# mysql -u-proot Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 15 to server version: 3.23.49-log
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> ^^^^^^^ mysql-prompten
Prøv at skrive nogle af de kommandoer jeg sendte i posten 24/01-2003 10:23:48: use mysql; select host, user, password from user;
Og sig hvad der sker, (uden at poste listen af krypterede passwords, hvis det lykkes)...
Spørgsmålet handler primært om brug af MySql. Om man skriver sciptet som mysql script (som jeg anbefaler kio_lex at gøre), eller som php script er mindre interessant, det er PRIMÆRT mysql viden og ikke PHP viden der er brug for. (De fleste der kender det ene kender heldigvis også det andet).
Men hvis det er så vigtigt for dig disky, så fortsætter vi i PHP gruppen og håber der ikke er nogen derovre der bliver stødt over det høje indhold af mysql i spørgsmålet.
Synes godt om
Ny brugerNybegynder
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.