* Fraser Stuart > Here are my two main security issues. > > 1) (valid) user does a sudo to root and runs "strings <db name>.MYD" - out > drops all the sensitive text > 2) (clever) user gets hold of the application user/password for > MySQL (it's > in the app config somewhere) - they run "mysql --user=foo --password=bar" > and away they go... > > Using GRANT will not stop #1 or #2 > Encrypting the comms will not stop #1 or #2 > Encrypting the file system may stop #1 but not #2 > > Encrypting fields will stop #1 & #2 so long as they don't have the key.
Ok... I agree, using GRANT would work only if you can trust root. :) Even encrypting the fields will (as you point out) only be safe as long as your users can't get a hold of the key, and with the clever root users you seem to have, that could be a problem... ;) IMO, #1 and #2 should be solved by physically restricting untrusted users from the db machine, and also from the middle layer ("application server", web server or similar). The client sw should only have access to your data through a API in the application layer. The level of security, need of encryption and so on could be separated in two different "domains": _within_ the system, and _between_ the system and the client. The need for security within the system is based on the need to protect the system, not only against unauthorized access, but also against sabotage or any kind of system crash. The needs are lower if you can separate the system from the users, how low will of course depend on what kind of secrets you try to protect. :) Don't rely on the security of the computer alone, a heavy lock on the door may be just as important as a strong root password. And don't forget the human factor: 1) Is your trusted sysadmin _really_ trustworthy, even if your competitor payed him 100K$? and 2) What if your sysadmin is hit by lightning? The keyword here is redundancy... make sure you have (at least) two trustworthy sysadmins, or at least that the root passwords are stored in a safe or similar, only accessible by The Boss. The need for security between the system and the client is based on the need to prevent unauthorized access to the data, and will often be solved using passwords and possibly also encryption. Needless to say, the passwords should be stronger with higher security demands. Encryption is needed when you want a somewhat elevated level of security, for instance when you can't trust your ISP. While encryption can prevent eavesdropping, be aware that this can give a false sense of security if, for instance, the client is a web browser, and the "secret" information is stored in the cache of the browser. In this case, "anyone" could read it from the cache after the authorized user has left the workstation. If you are _really_ paranoid, you should also worry about the electromagnetic radiation from the computer screens and cables, and you would need to physically protect the workstations. (For more on this, do a google search on "tempest protected" or similar.) To summarize: I think you already have a security problem, if you can't trust your root users. Security is not only a matter of protecting information from beeing read, it is also about protecting from sabotage/destruction. No matter what kind of encryption/security you implement, you would need to store the keys somewhere, and root will have access to it. The remedy: only allow access through an application layer. Encrypt the client/app.layer communication if you need to. (An exception to the above would be if there was only one or a few fields in the database that needed protection. Then I would use encryption for those fields. But not for the entire db.) -- Roger --------------------------------------------------------------------- Before posting, please check: http://www.mysql.com/manual.php (the manual) http://lists.mysql.com/ (the list archive) To request this thread, e-mail <[EMAIL PROTECTED]> To unsubscribe, e-mail <[EMAIL PROTECTED]> Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php