我看到一些建议认为,可以通过将所有的数据访问都通过存储过程来确保数据库的安全。
我知道对于SQL Server,可以通过对表甚至列进行CRUD操作来确保安全。
例如:
--// Logged in as 'sa'
USE AdventureWorks;
GRANT SELECT ON Person.Address(AddressID, AddressLine1) to Matt;
GRANT UPDATE ON Person.Address(AddressLine1) to Matt;
--// Logged in as 'Matt'
SELECT * from Person.Address; --// Fail
SELECT AddressID, AddressLine1 from Person.Address; --// Succeed
UPDATE Person.Address SET AddressLine1 = '#____ 2700 Production Way'
WHERE AddressID = 497; --// Succeed
既然可以通过保护表甚至列来防止CRUD操作,那么使用存储过程如何提供额外的安全性或安全管理?