Documentos de Académico
Documentos de Profesional
Documentos de Cultura
asignarprivilegios
SEPTIEMBRE28,2014
EnestaentradavamosavercmogestionarusuariosMySQLdesdelalneadecomandos/shellde
MySQL.Lomsbsicoquedebemossaberalrespectoescrear,borrarymodificarlosusuariosas
comosaberelmododemanejaryasignarorevocarlosprivilegiosquecadausuariovaatenerrespecto
alasbasesdedatosinstaladasenelservidor.
Lagestindeusuariostambinsepuederealizardesdeherramientasgrficasyaplicacioneswebcomo
porejemplophpMyAdminoeladministradorgrficodeMySQL,enestecasovamosaloquesiempre
tendremosamano,lashelldeMySQL.
LoprimeroquedebemoshaceresaccederalashelldeMySQLconunusuarioquetengaprivilegiosde
administracin,enestecasolohacemoscomorootydesdeelpropiohostporlneadecomandos:
#mysqlurootp
Enterpassword:**********
WelcometotheMySQLmonitor.Commandsendwith;or\g.
YourMySQLconnectionidis12
Serverversion:5.1.73Sourcedistribution
Copyright(c)2000,2013,Oracleand/oritsaffiliates.Allrightsreserved.
OracleisaregisteredtrademarkofOracleCorporationand/orits
affiliates.Othernamesmaybetrademarksoftheirrespective
owners.
Type'help;'or'\h'forhelp.Type'\c'toclearthecurrentinputstatement.
mysql>
CrearusuarioMySQLconCREATEUSER
ElcomandoCREATEUSERdeMySQLnosvaapermitircrearusuariosyasignarlesunacontrasea
conelparmetroIDENTIFIEDBY.Msadelanteveremosqueestepasolopodemosevitarutilizando
directamenteelcomandoGRANTparalacreacindelusuarioyasignacindeprivilegiosenunnico
paso.
Lasintaxiseslasiguiente:
CREATEUSERuser[IDENTIFIEDBY[PASSWORD]'password']
Aspues,siquisieramoscrearunusuariollamadofooyconclavemipasswordejecutaramosel
siguientecomando:
mysql>CREATEUSERfooIDENTIFIEDBY'mypassword';
QueryOK,0rowsaffected(0.01sec)
Tenemoslaopcindeespecificarlacontraseaconsuvalorenhash.Estevalordebesergenerado
anteriormenteconlafuncinPASSWORD()deMySQL:
mysql>SELECTPASSWORD('mipassword');
++
|PASSWORD('mipassword')|
++
|*CEE870801502ACAD44FA46CA2CA4F58C2B721A67|
++
1rowinset(0.00sec)
mysql>CREATEUSERfooIDENTIFIEDBYPASSWORD'*CEE870801502ACAD44FA46CA2CA4F58C2B721A67';
QueryOK,0rowsaffected(0.01sec)
EliminarusuarioMySQL
EliminarunusuarioMySQLessencillo,elcomandoautilizaresDROPUSERseguidodelusuarioa
eliminar:
mysql>DROPUSERfoo;
QueryOK,0rowsaffected(0.00sec)
AsignarprivilegiosalusuarioconGRANT
CuandocreamosunusuarioutilizandoCREATEUSER,efectivamentelacreacinessatisfactoria,pero
verisqueelusuarionicamentepuedeconectarseyvisualizarciertosparmetrosdelservidor.Laverdad
esquepodemoscreardirectamentelosusuariosconelcomandoGRANTyalavezasignarlos
privilegiosquequeramosrespectoalasbasesdedatosdelsistema.BsicamenteGRANTasigna
privilegiosalusuariosindicado,ysinoexistelocrea.
Lasintaxisymododeusodelcomandoseralasiguiente:
GRANTONprivilegiosTO'usuario'@'host_de_conexion'
>IDENTIFIEDBY'password'WITHGRANTOPTION;
Enelsiguienteejemplo,asignamostodoslosprivilegiosposiblesalusuariofoo(sinoexistesecrea)
sobretodaslasbasesdedatosytablas,paraconexionesdesdelocalhostnicamenteyademsle
concedemoselpermisoGRANTparaquetengalaopcindeasignarpermisosaotrosusuarios:
mysql>GRANTALLPRIVILEGESON*.*TO'foo'@'localhost'
>IDENTIFIEDBY'mipassword'WITHGRANTOPTION;
Losprivilegiosdisponiblessonlossiguientes:
ALLPRIVILEGES,ALTER,ALTERROUTINE,CREATETABLE,CREATEROUTINE,CREATE
TEMPORARYTABLES,CREATEUSER(PermiteutilizarCREATEUSER,DROPUSER,RENAME
USER,yREVOKEALLPRIVILEGES),CREATEVIEW,DELETE,DROP,EXECUTE,FILE,
INDEX,INSERT,LOCKTABLES,PROCESS,RELOAD,REPLICATIONCLIENT,REPLICATION
SLAVE,SELECT,SHOWDATABASES,SHOWVIEW,SHUTDOWN,SUPER,UPDATE,USAGE,
GRANTOPTION.
EnladocumentacinoficialdeMySQLencontrarisinformacinydetalledecadaprivilegio.
RecordadqueelcomandoHELPdelashelldeMySQLosmostrarlaayudarelativaacadacomando.
ParaencontrarayudadeGRANTusamosHELPGRANTyvemosqueademsdelainformacinrelativa
alcomandoaparecenvariosejemplosdeuso:
mysql>HELPGRANT
[...]
CREATEUSER'jeffrey'@'localhost'IDENTIFIEDBY'mypass';
GRANTALLONdb1.*TO'jeffrey'@'localhost';
GRANTSELECTONdb2.invoiceTO'jeffrey'@'localhost';
GRANTUSAGEON*.*TO'jeffrey'@'localhost'WITHMAX_QUERIES_PER_HOUR90;
[...]
Comopodisobservar,cuandolosprivilegioshacenreferenciaabasesdedatos,tablasohostsdistintos
seejecutauncomandoporcadaunodeellos,nosepuedeenglobartodoenunanicaejecucinyaquese
almacenaenregistrosdistintosdentrodelatabladeprivilegios.
Siquisieramosasignarprivilegiosaunusuarioquevaaconectardesdedistintoshosts,loharamosde
modoindividual,esdecir:
mysql>GRANTALLONdb1.*TO'foo'@'host1';
mysql>GRANTALLONdb1.*TO'foo'@'host2';
Lomismoparadistintasbasesdedatosotablas:
mysql>GRANTALLONdb1.*TO'foo'@'localhost';
mysql>GRANTALLONdb2.*TO'foo'@'localhost';
mysql>GRANTALLONdb3.tabla1TO'foo'@'localhost';
mysql>GRANTALLONdb4.tabla1TO'foo'@'localhost';
Paraasignarunwildcarddehostsutilizamoselcarcter%.Esdecir,deestemodoelusuariopuede
conectaraMySQLdesdecualquierhost:
mysql>GRANTALLONdb1.*TO'foo'@'%';
VisualizarprivilegiosdeunusuarioconSHOW
GRANTS
ElcomandoSHOWGRANTSsirveparavisualizarenlasalidaestndardelashelldeMySQLlos
privilegiosasignadosaunusuario:
mysql>SHOWGRANTSfor'foo'@'localhost';
++
|Grantsforfoo@localhost|
++
|GRANTALLPRIVILEGESON*.*TO'foo'@'localhost'IDENTIFIEDBYPASSWORD'...'|
++
1rowinset(0.00sec)
RevocarprivilegiosalusuarioconREVOKE
ParaeliminarprivilegiosquepreviamentehemosasignadoaunusuarioMySQLconelcomando
GRANT,utilizaremoselcomandoREVOKE.Lasintaxisseralasiguiente:
REVOKEprivilegios,GRANTOPTIONFROM'usuario'@'host';
LaopcinGRANTOPTIONsloesnecesariasielusuariohasidoconfiguradoconelprivilegio
WITHGRANTOPTION.
Aligualquealahoradeasignarlosprivilegiosserealizadeformaindividualporbasededatos,host,
tabla,etc.Alahoraderevocareslomismo:
mysql>SHOWGRANTSfor'foo'@'localhost';
++
|Grantsforfoo@localhost|
++
|GRANTALLPRIVILEGESON*.*TO'foo'@'localhost'IDENTIFIEDBYPASSWORD'*CEE'|
|GRANTSELECTON`test`.*TO'foo'@'localhost'|
++
2rowsinset(0.00sec)
mysql>SHOWGRANTSfor'foo'@'host1';
++
|Grantsforfoo@host1|
++
|GRANTALLPRIVILEGESON*.*TO'foo'@'host1'IDENTIFIEDBYPASSWORD'*CEE8707'|
++
1rowinset(0.01sec)
UnavezvisualizadoslosprivilegiosconelcomandoSHOWGRANTS,eliminamoslosqueestimemos
oportuno:
mysql>REVOKESELECTONtest.*FROM'foo'@'localhost';
QueryOK,0rowsaffected(0.01sec)
Enelcasodefoo@localhostvemosquetienetodoslosprivilegiosparatodaslasbasesdedatos,en
lugardeeliminarcompletamenteesaentradadeprivilegiospodemoshacerlamsrestrictiva,porejemplo
manteniendotodoslospermisosexceptoINSERT:
mysql>REVOKEINSERTON*.*FROM'foo'@'localhost';
QueryOK,0rowsaffected(0.00sec)
YvemoscomoMySQLautomticamenteeliminaelprivilegioINSERTymantieneelresto:
mysql>SHOWGRANTSfor'foo'@'%';
ERROR1141(42000):Thereisnosuchgrantdefinedforuser'foo'onhost'%'
mysql>SHOWGRANTSfor'foo'@'localhost';
++
|Grantsforfoo@localhost|
++
|GRANTSELECT,UPDATE,DELETE,CREATE,DROP,RELOAD,SHUTDOWN,PROCESS,
FILE,REFERENCES,INDEX,ALTER,SHOWDATABASES,SUPER,
CREATETEMPORARYTABLES,LOCKTABLES,EXECUTE,REPLICATIONSLAVE,
REPLICATIONCLIENT,CREATEVIEW,SHOWVIEW,CREATEROUTINE,ALTERROUTINE,
CREATEUSER,EVENT,TRIGGERON*.*TO'foo'@'localhost'IDENTIFIEDBYPASSWORD
'*CEE870801502ACAD44FA46CA2CA4F58C2B721A67'|
++
1rowinset(0.01sec)
FLUSHPRIVILEGES
ElcomandoFLUSHPRIVILEGESsirvepararecargarlatabladeprivilegiosperosloesnecesario
cuandosemanipulandirectamentelastablasdeprivilegiosejecutandoINSERT,DELETE,etcenlugar
deusarloscomandosGRANTyREVOKE:
mysql>FLUSHPRIVILEGES;
QueryOK,0rowsaffected(0.01sec)
Esdecir,enloscasosqueheespecificadoenesteartculonoesnecesarioutilizarestemododerecargar
losprivilegios,sloseranecesariosicrearamosoeliminaramoslosusuariosamanodirectamentesin
loscomandosespecficosparaellodeMySQL:
mysql>INSERTINTOuser
>VALUES('localhost','foo',mipassword'),
>'Y','Y','Y','Y','Y','Y','N','N','N','Y','Y','Y','Y','Y');