我们有一些企业内部网用户使用WinForms应用程序来处理后面有SQL服务器的系统.集成安全性已设置,允许所有用户更新和删除权限,其中应用程序安全性限制表更新的方式和位置.
但是,某些用户可以使用SQL查询工具,并直接访问数据库以构建报告.但是,通过集成安全性,它们具有应该没有的表的默认更新权限,因为应用程序将规则应用于更新.
这是一个更合适的例子,为应用程序提供中央SQL身份验证登录,而用户获得集成安全性的只读权限吗?
正如Jon所说,存储过程可以为您提供直接表修改的保护.还有其他选择.您可以使用SQL Server的"应用程序角色"(通过sp_setapprole proc).这使您可以继续为每个人使用单独的ID,但仅在应用程序连接时(通过前端)提升用户权限.
使用共享ID的一个主要缺点是你忘记了谁将SQL提交到服务器,尽管如果它们都是内部的,你可以获得机器名称.
但是还有其他一些问题.听起来好像您的用户可以连接到数据库并随意运行查询.由于直接连接的SQL会话中的用户行为,您在应用程序中存在严重的停机风险.如果您可以将其关闭,您可能希望尝试创建一个报告数据库,该数据库会按照您的业务可以容忍的时间间隔(即每天)进行更新.HTH
我假设你的问题是你的应用程序直接执行sql语句.如果您可以重构它以便它执行存储过程,您可以授予exec对过程的权限并拒绝直接更新表.但这可能无法实现,具体取决于您的应用程序的功能.