编者注:Robert L Davis是微软的高级数据库管理员和专家,同时是《SQL Server》杂志的撰稿人,并合著《Pro SQL Server 2008 Mirroring》一书。
安全对SQL Server而言至关重要,但却通常被很多SQL专家忽视。作为数据库的管理人员,我们是数据库所保存数据的保护者和监护人。如果我们不能够控制访问数据库的权限,就无从谈保护。
给用户或程序配置的权限超出规定的级别,会造成数据丢失或数据盗窃,给企业造成损失。允许过度频繁的数据读取也会影响性能,因为用户并不会注意运行查询的类型。在美国,政府还有相应的法规(如PCI,HIPAA,SOX等),如果没有按照访问权限规定进行设置,可能面临高额罚款,甚至入狱。
这就是为什么我们要遵循最小权限原则(Principle of Least Privilege)。根据维基的定义,“在计算机科学以及其它领域中,最小权限原则是要求计算环境中的特定抽象层的每个模块如进程、用户或者计算机程序只能访问当下所必需的信息或者资源。赋予每一个合法动作最小的权限,就是为了保护数据以及功能避免受到错误或者恶意行为的破坏。”该原则说得很清楚,只能赋予所需(required)和合理(justified)的***权限。关键词是所需和合理二词。DBA会收到大量开通权限的请求。如果DBA开通了访问生产数据库的权限,就应该有能力解释为什么他们开通了这样的权限,说清楚为什么这是所需的,为什么是合理的。
你可能经常听到这样的说法,说非生产环境中没有能够支持他们想查询语句的功能或数据。或者,很难进行他们想要运行的测试或调查。如果非生产环境不足以满足这样的需求,正确的办法是解决非生产环境的不足。如果按照正确的方法很难完成你的工作,那就换份简单些的工作。事实上,很多人告诉你只能在生产环境中才完成的工作,却有大量高技能的专家能够在非生产环境中完成。
我曾被临时借调去接手一个大型商务智能应用的运营。接管没有多久,我发现开发人员都有SysAdmin的系统管理员访问权限,而且还可以自己部署新的程序。我立刻删除了所有开发人员访问生产的权限,并通知他们。当然这让很多人不高兴,但之后他们也意识到,我做的是正确的,而且几乎没有人和我来进行争吵。
接下来我负责运营该应用程序的三个月内,开发工程师团队也证明他们具备成为一个真正企业级队伍的能力。但之后该公司招到了一名全职DBA,六个月后,听说事情又恢复到以前的状态,开发人员又有了SysAdmin的权限,各自进行各自的部署。DBA辩解道,他对于这些请求没法说不,是开发人员迫使他这样做的。这个故事只是想说,DBA只要自己本事过硬,就可以坚持正确的方式。
DBA应该承担起判断是否应该给与权限的责任,确保遵循最小权限原则,否则,因为这个失误被公司开除,也不算冤枉。