Comparing PostgreSQL & MySQL: Security - Meetup

pridefulauburnΔιαχείριση Δεδομένων

16 Δεκ 2012 (πριν από 4 χρόνια και 11 μήνες)

403 εμφανίσεις

Comparing  
PostgreSQL
 &  
MySQL
:  
Security  
Authen:ca:ng,  Accessing  and  Protec:ng  your  Data  
Jonathan  S.  Katz  
NYCPUG  
May  25,  2011  
Security:  
Biiiig
 Topic  


Exists  at  different  levels:  


Database  


Applica:on  


Opera:ng  System  


Network  


People  
2  
And  for  
PostgreSQL
 &  
MySQL
 


Lots  of  features;  lots  of  security  implica:ons  


User  management  


Feature  access  


Server  access  


Goals:  


Overview  of  user  management  in  both  databases  


Mechanisms  for  protec:ng  data  
3  
Users  -­‐  
PostgreSQL
 


Defined  by  username  


CREATE  USER  ‘
jkatz
’;  -­‐-­‐  alias  for  CREATE  ROLE  except  
defaults  to  allowing  login  


CREATE  ROLE  ‘
jkatz
’;  


Can  be  put  into  “groups”  


CREATE  ROLE  ‘wheel’;  


GRANT  ‘wheel’  TO  ‘
jkatz
’;  


Can  be  :ed  to  usernames  on  OS  for  
authen:ca:on  


ident
,  peer  (peer  added  in  9.1)  
4  
Users  -­‐  
MySQL
 


Defined  by  username  and  allowable  hosts  


CREATE  USER  ‘
jkatz’@’localhost
’;  


CREATE  USER  ‘jkatz’@’10.2.3.4’  IDENTIFIED  BY  
‘secure’;  


CREATE  USER  ‘jkatz’@’10.2.4.%’  IDENTIFIED  WITH  
auth_plugin
;  


No  authen:ca:on  method  for  OS  usernames  


Pluggable  authen:ca:on  allows  for  this  extension  
5  
PostgreSQL
 –  Host  +  Authen:ca:on  
Management  


Stores  informa:on  in  “
pg_hba.conf
”  file  
#  TYPE    DATABASE                USER                        ADDRESS                                  METHOD  
local      all                                  all                                                                                trust  
host        website                    web                              10.0.0.0/24                            md5  
hostssl
 replica:on          
bkup
                           10.0.1.20/32                          cert  
host        all                              +wheel                  10.0.2.2/32                            md5  
host        analy:cs                web                          .
example.com
                       md5  


hop://www.postgresql.org/docs/current/sta:c/auth-­‐
methods.html
 
6  
External  Authen:ca:on  


PostgreSQL
 


LDAP  


GSSAPI/SSPI/Kerberos  


RADIUS  


SSL  Cer:ficate  Authen:ca:on  


PAM  (pluggable  authen:ca:on  modules)  


MySQL
 


Pluggable  authen:ca:on  


Define  users  with  name  of  
plugin
 
7  
Password  Hashing  


For  storing  user  passwords:  


PostgreSQL
:  md5  


MySQL
:  own  algorithm,  resembles  sha1  (but  41  
bytes)    
8  
User  Permissions  


MySQL
 


GRANT/REVOKE  requires  user  and  host  


PostgreSQL
 


GRANT/REVOKE  requires  only  role  (or  user)  


Host  management  dealt  with  in  
pg_hba.conf
 
9  
User  Permissions  


Both  databases:  


Have  permissions  on  database,  table,  column  level  


PostgreSQL
 


Also  has  permissions  on  “schema”  



schema”.”table”.”column
”  


“public”  is  default  schema  


(
MySQL
:  “
database”.”table”.”column
”)  


SQL-­‐related  permissions  mostly  similar  


e.g.  SELECT,  INSERT,  DELETE,  TRIGGER,  etc.  
10  
User  Permissions  


Other  permissions  are  database  feature  
specific  


PostgreSQL
 


Sequences,  languages,  foreign  data    wrappers,  etc.  


Specific  host  connec:vity  defined  in  
config
 files  


9.1:  replica:on  permission  for  user  


MySQL
 


File  access,  replica:on,  super,  shutdown  
11  
User  Resource  Limits  


PostgreSQL
 


Global  (
postgresql.conf
)  


Certain  parameters  require  complete  restart  (e.g.  
max_connec:ons
)  


Not  per  user,  but  can  affect  user  interac:ons  


Per  Session  (SET)  


Per  transac:on  (SET  LOCAL)  


MySQL
 


Global  


Per  Account  +  resource  


MAX_QUERIES_PER_HOUR,  MAX_UPDATES_PER_HOUR,  
MAX_CONNECTIONS_PER_HOUR,  MAX_USER_CONECTIONS  
12  
Other  Resource  Limits  


PostgreSQL
 


Limits  available  for  system  tweaking  e.g.  memory  
usage  


MySQL
 


Can  set  limits  on  maximum  rows  in  a  table,  
average  row  size  
13  
Upda:ng  Permissions  


PostgreSQL
 


GRANT  /  REVOKE  and  go  


MySQL
 


Access  control  stored  in  memory  


GRANT  /  REVOKE  and  go  


FLUSH  PRIVILEDGES  –  only  required  if  INSERT/
UPDATE/DELETE  on  permissions  table  
14  
So  Far…  


User  management  is  similar  in  both  RDBMS  


Authen:ca:on  mechanisms  very  different  


Management  in  all  SQL  vs.  server-­‐side  file  
edi:ng  


How  you  use  the  tools  


e.g.  do  not  grant  “DROP”  on  the  “
mysql
”  table  to  
any  user    
15  
Data  Encryp:on  


PostgreSQL
 


pgcrypto
 library  
hop://www.postgresql.org/docs/
current/sta:c/pgcrypto.html
 


General  hashing,  password  hashing,  PGP,  other  
encryp:on  methods,  secure  random  number  
generator  


MySQL
 


hop://dev.mysql.com/doc/refman/5.6/en/encryp:on-­‐
func:ons.html
 


MD5,  SHA1,  SHA2,  AES,  DES,  crypt    
16  
Data  Encryp:on  


Encryp:on  methods  only  as  good  as  your  setup  


Password  checking:  


SELECT  *  FROM  users  WHERE  md5(‘omgsecret’)
=
users.password
;  


What  level  of  statement  logging  on  the  server?  


Encrypted  column:  


SELECT  
AES_DECRYPT(a.encoded_str
,  
a.key
)  FROM  a;  


Storing  key  next  to  encoded  string  =  bad  


Statement  logging?  
17  
Data  Protec:on  -­‐  
SELinux
 


PostgreSQL
 


9.1  –  
SEPostgreSQL
 project  added  as  module  


Supports  various  levels  of  security  labels    


hop://wiki.postgresql.org/wiki/SEPostgreSQL
 


hop://www.postgresql.org/docs/9.1/sta:c/
sepgsql.html
 


MySQL
 


Runs  at  lowest  security  level  
18  
Data  Transmission  


Both  
PostgreSQL
 and  
MySQL
 support  plaintext  
and  SSL  transmission  


PostgreSQL
:  


Different  strategies:  disable,  allow,  prefer,  require,  
verify-­‐ca,  verify-­‐full  


hop://www.hagander.net/talks/Secure
%20PostgreSQL%20deployments%20upd_v9.pdf
 


MySQL
:  


Allowable,  required,  verify  cer:ficate  
19  
Process  Management  


Both  
PostgreSQL
 and  
MySQL
 advise  not  to  run  
as  root  user  


PostgreSQL
 will  not  let  you  run  “
initdb
”  as  root  


Considera:ons  


File  system  access  (impor:ng  /  dumping  files)  
20  
Conclusion  


Large  topic  just  for  one  of  these  databases  


Seeing  how  
PostgreSQL
 +  
MySQL
 handle  
authen:ca:on  /  access  gives  insight  into  prior  
deployments  


Differences  are  in  the  details  
21