Pete Finnegan's recent webinar, "The Right Way to Secure Oracle," was pretty controversial. His message? Database security is not what's important -- data security is.
Most companies use the checklist/tip based approach to secure their databases. However, this is a flawed approach. The checklists available for hardening are based around parameters and the core database software" not the data. The goal must be to secure the *data*, not the software; of course we must use the software settings to secure the data, but the focus of any data security project must be the data.
While I agree with what Pete is trying to do, I don't believe the assertion is correct. If the container where you store your data (i.e., a relational database) is insecure, then data security can be bypassed altogether. SQL injection attacks should prove that data security is dependent on the container as well. But the essence of what Finnegan is advocating is dead-on: Data security should be the focus, and it's not. The correct approach is you do both. That means you can't simply go through a list of best practice to secure the container and expect data to be secure by proxy.
Why is that so important? Because data does not know how to protect itself. Security and appropriate use is not an intrinsic characteristic of the data. Data needs to be secured, and not just black-and-white access control settings, but by defining realistic threats and employing countermeasures. That takes more analysis beyond a configuration and vulnerability check list.
Consider that when we move data into a relational database we map data elements into rows and columns and match the data type to the data attributes. In essence we define the meta-data. This helps us keep bad data from being inserted, and it also helps us with reporting and analysis functions (e.g., high value, average, alphabetical ordering, etc). When we design tables we balance normalization for efficient storage with query performance. We rewrite queries to shorten the execution plan. We use primary keys to avoid duplicates. We partition tables to address scalability. We may use integrity constrains, foreign key relationships, or triggers to control how data is inserted and used. All of these items are design considerations.
It should be exactly the same for data security!
When was the last time you architected a database system for data security? I'll bet never. I think that is the thrust of Pete's argument: DBAs are focused on the container, not on the contents. The same care and attention to detail should be -- and can be -- given for data security as it is for database design. Data security measures are just another form of system design. Where is the sensitive information? How is it used? Who should have access to it? What threats should it be protected from? The answers to these questions help us select database internal features, such as labeling, masking, and auditing, that enhance access controls and authorization maps. Database activity monitoring augments database security measures to verify usage. In some cases we simply don't trust the database container, or the security measures are not granular enough, so we encrypt before it is stored -- at the application layer.
Next time you architect a database, include data security as one of your design constraints. Data security is the goal, and database security is just one of the building blocks to meet that goal.
Adrian Lane is an analyst/CTO with Securosis LLC, an independent security consulting practice. Special to Dark Reading. Adrian Lane is a Security Strategist and brings over 25 years of industry experience to the Securosis team, much of it at the executive level. Adrian specializes in database security, data security, and secure software development. With experience at Ingres, Oracle, and ... View Full Bio