03. juni 2004 - 02:16Der er
51 kommentarer og 1 løsning
semiautomatisk oprettelse af db og bruger
Hejsa eksperter
Jeg kunne godt tænke mig at have et script til at kopiere strukturen af en mysql database til en ny database, som jeg i scriptet selv kan bestemme navnet på, og samtidig oprette en bruger til den nye database. (ikke root) Scriptet skal kunne aktiveres fra et website.
Jeg tænkte på om man kunne lave noget i stil med: select * into <table2> from <table1> bare med en hel DB select * into (create request.form("DBnavn")) from <db1> og derefter oprette en bruger på samme måde...
eller måske noget med at få fat i cmd fra ASP/PHP og så hente et dump ind (Jeg har allerede den DB jeg vil lave en kopi af i et dump med create table osv.), og lave en replace i linien med create db til det nye navn defineret i en form, og så skyde det hele af... Jeg tænker at det er en god løsning, men kan ikke lige gennemskue med hvilken bruger jeg skal connecte til db... skal jeg lave en user med root priv ? dette er dog nok en alvorlig sikkerhedsbrist, da IUSER vil have adgang til den...
Jeg sidder og roder lidt med at lave en fil med ASP, som jeg feks kalder lavDB.cmd som jeg så vil kalde fra et script. Jeg kan jo selv bestemme hvad der skal stå i denne fil, så der kan der jo indsættes SQL til at oprette den nye DB
Jeg har bare lidt problemer med user og password...
og for at det ikke skal være løgn, så er jeg vist kommet til at ændre root password så jeg ikke kan få fat i noget... :-)
Dette er scriptet: CREATE database IF NOT EXISTS newdb; CREATE TABLE newdb.newtbl (ID tinyint(3) unsigned NOT NULL auto_increment) TYPE=MyISAM; INSERT INTO newdb.newtbl VALUES (1); fejl: der kan kun være et autoincrement-felt og det skal være indexeret
ja, jeg gjorde det sådan i stedet, er det ikke OK ? INSERT INTO mysql.user VALUES ('localhost','newdbuser',PASSWORD('newdbuserpass'),'N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','','','','',0,0,0); INSERT INTO mysql.db VALUES ('localhost','newdb','newdbuser','Y','Y','Y','Y','Y','Y','N','N','N','N','Y','N');
prøv at gemme dette som et create.sql-fil CREATE database IF NOT EXISTS newdb; CREATE TABLE newdb.newtbl (ID tinyint(3) unsigned NOT NULL auto_increment primary key) TYPE=MyISAM; INSERT INTO newdb.newtbl VALUES (1); INSERT INTO mysql.user VALUES ('localhost','newdbuser',PASSWORD('newdbuserpass'),'N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','','','','',0,0,0); INSERT INTO mysql.db VALUES ('localhost','newdb','newdbuser','Y','Y','Y','Y','Y','Y','N','N','N','N','Y','N'); FLUSH PRIVILEGES; quit;
og så udfør: mysql -u root -ppwd mysql <create.sql
OK så er der et ASP script der laver ovenstående script, og mysql -u root -ppwd mysql <create.sql virker så det hele oprettes som det skal :-)
Så mangler der kun det at "mysql -u root -ppwd mysql <create.sql" også skal aktiveres fra et ASP/PHP script som kan kaldes fra mit web efter at create.sql er oprettet. Hvordan klares den ?
kan du ikke lave noget hvor popen kalder hele sætningen mysql -u root -ppwd mysql < create.sql <?php $fp = popen('C:\mysql\bin\mysql -u root -ppwd mysql < create.sql','w'); if( $fp ) { print "success"; } else { print "fejl"; } ?>
Hvis dette virker behøver vi ikke en ekstra fil, så kan vi skrive "direkte" til mysql - og ikke til en fil og så kalde mysql bagefter. Men i første omgang skal vi bare se om det virker :).
dit nr 2 kører vist heller ikke og jeg har lige prøvet dette, som heller ikke opretter en db, selvom det skriver ok <?php $fp = popen('C:\mysql\bin\mysql -u root -ppwd mysql < D:\DB_createfile\newdb.sql','w'); if( $fp ) { pclose($fp); echo "ok"; } else { echo "fejl"; } ?>
jeg prøver imorgen at lege lidt med det og se om jeg kan få det til at virke - men jeg har et unix system så jeg er ikke overbevist om at det kan bruges til noget direkte.
Pointene er allerede dine, men du må meget gerne lige hjælpe lidt mere hvis du vil. Hvad er en OCX ? http://vbmysql.com/forums/index.php?t=msg&th=9042&start=0&rid=0 og hvis en ocx ikke er noget, eller det samme som det VB de laver, så måske hjælp med at lave det VB i stedet, eller den del der skal aktivere det... Jeg kan vist godt selv få det VB til at køre, men det skal jo også køres. Hvis man ikke kan komme uden om det sikkerhedsmæssigt, så laver jeg det bare så det skal aktiveres direkte på serveren.
En idé: Istedet for at lade webdelen gøre alt arbejdet. Kunne du så ikke bare lade dit webinterface gemme en "kommando" i en tabel der siger "opret denne database til denne bruger og kopiere struktur fra database2" .. Bare en helt almindelig tabel. Det er det eneste webdelen gør, laver en record.
Så laver du et VB script der så bliver kørt hver x minutter (timer eller een gang dagnligt.. efter behov) .. og scanner denne tabel.. Nu kan den se at webdelen har "bestilt" og kan gøre hvad der nu er bestilt.
På den måde får du en ren opdeling af web og "backend". Og så vil din webserver ikke have behov for at have alt for mange rettigheder..
Problemet er self, at der kommer et delay fra man "bestiller" til det bliver behandlet. Men det ved du nok bedre end mig, om det er et problem :)
webserveren for at vide at nu skal der kopieres en database og oprettes en bruger. Så den tilføjer en række i tabellen jobs.
Jobs består af: - srcdb (navnet på den database man skal kopiere FRA) - dstdb (navnet på den nye database) - username (brugernavn) - password (..)
Det er det eneste webserveren gør.
Hver time har du så et lille VB(?) script der kigger i jobs-tabellen. Den vil nu se at der et job der skal udføres, så den laver en ny database (vha dstdb), en ny bruger (vha username/password) og så kopiere den data fra srcdb til dstdb. Når alt dette er gjort så bliver rækken slettet.
Så har du delt opgaven op i to processor. Nu behøver webserveren ikke have adgang til mere end højst nødvendigt (den skal kun skrive i db).. Og da brugeren ikke kommer i direkte i kontakt med VB-scriptet så får du minimeret risikoen.
Det jeg skal have gjort er at jeg allerede har et site (faktisk er der to at vælge i mellem), som jeg skal have lavet en kopi af. Det der skal laves er: Jeg opretter min kunde i min database med kundens domænenavn Lave en mappe feks med samme navn som domænet. Kopiere alle filer fra fungerende site til ny mappe. oprette ODBC lave ny DB (kopi af fungerende shop) oprette bruger oprette domæne i IIS oprette midlertidigt domæne i IIS (subdomæne af eget domæne der virker med det samme)
Jeg tænkte bare om der var en måde at automatisere det hele på, så jeg ikke skal bruge en halv dag hver gang jeg opretter et nyt site...
Derudover skal jeg kunne gøre det hele fra min PDA, som jeg forbinder til serveren via VPN når jeg er ude. Der er billedet jo ikke så stort, så det ville være lækkert at kunne gøre det hele med et klik :-)
C# er jo blot et programmeringssprog. Om du bruger det, java, c/c++, perl, VB er vel ikke så vigtigt. Det afhænger mere af du/en anden kan lave det i C# - og i så fald er det vel bare at gå igang :)
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.