我们刚刚购买了一个程序,要求用户在MS SQL服务器中拥有一个帐户,并具有对程序数据库的读/写权限。
我担心的是,由于这些用户现在可以对数据库进行写访问,所以他们可以直接连接到程序客户端之外的SQL服务器,然后直接在表中混淆数据。
有反正我可以阻止访问数据库,同时仍然允许通过客户端程序访问?
编辑:SQL 2008 Express,如果需要,可以升级到SQL 2008 R2标准版。
每个工作站都需要访问,以便人们logging他们的小时/时间表。 工作站被locking,所以没有人有osql,工作室经理或类似的东西。 但是,他们可以设置一个ODBC数据源,然后通过Excel / Access进行连接。
现在只想到这一点,搞乱数据不再是大问题了,因为每个人的工资等都是在这个系统里面,所以存在隐私问题。
我同意这是一个非常糟糕的devise。
不。如果用户对数据库有读/写访问权限,并且能够不使用程序连接到它,他们可以执行像UPDATE sometable SET attribute = NULL; 并摧毁你的数据集,或做任何他们想要的任意改变。
不幸的是,SQL权限没有能力来expression正常与恶意更改的概念,而这些更改是以其他方式访问的,所以我怀疑拒绝他们更新logging的权限会有些自欺欺人。
就像乔尔的评论,如果这是你的环境中的一个问题,我会要求退款。 保持频繁的备份和日志;)
如果您有办法阻止login不使用应用程序(例如通过限制连接到单一来源,如果您的应用程序通过terminal服务或citrix运行),您可以绝对使用它来提高安全性。
我有点晚了,我同意你应该把应用程序的开发者指向怪人,我会把我的担心写在文字上,让有政治力量的人了解风险,但是我希望能给你更多选项。
如果我真的陷入困境,我会考虑创build一个LOGON事件的触发器。 在触发器中,我会find一种方法来区分我将称为“合法”login和“非法”login,并阻止非法的login完成。 合法的login将是用户使用适当的应用程序连接到正确的数据库,以及您可能需要的任何pipe理login,作业login等。 编写这个时,我会非常小心,因为这似乎是将自己locking在服务器之外的好方法。 BOL说,LOGON TRIGGERS在SQL 2008中是可用的,我很确定它们在Express中可用。
这个策略的问题是,你可能会发现自己玩的是“whack-a-mole”,在那里你排除Excel和Access,然后有人想出如何编写一个快速的vb.net应用程序,让他们进入,然后你阻止,那么有人修改连接string来更改应用程序名称等。用户越是知识渊博,越难以阻止他们。 如果你有开发者,他们可能会认为这是一个挑战。 我会说任何人都在积极尝试寻找安全控制方法,即使这些控制并不完美)是一个问题。 (如果我把屏幕的门锁在我家里,很明显我不想让任何人进来。如果有人用小刀削减屏幕并进入屏幕,那么他们确实做错了。)
另一件事就是简单地在DMV上运行一个查询来查找那些没有按照规则玩的用户。 您可以从系统DMV获取用户,主机和应用程序名称信息。 如果你定期运行这个查询(每分钟一次)并将结果保存在一个表格中,你可以每天(或每周)看一遍,然后去指责坏的angular色。 或者让人力资源部门去做。
另一个要尝试的是,如果您有任何查找和报告长时间运行的查询,您可以查找“奇怪”的查询。 实际上,我曾经抓过一个人做一些事情,同时查看问题查询的日志。 通常情况下,没有经验的用户可能会运行效率低下的查询,这些查询会读取大量数据或导致长时间段的数据块。 有时,如果应用程序对查询的方式有一定的“风格”,则可以select其他人(或其他)编写的查询。 IOW,使用一个非常人为的例子,有一个很大的区别:
select* from salary where employee =“我”
和
从salary_amount的工资单中select*
总结:修复应用程序将是最好的。 防止login可能是好的。 试图发现违规者事后可能是你所能做的。