Sql server SQL Server身份验证还是集成安全性?

Sql server SQL Server身份验证还是集成安全性?,sql-server,integrated-security,Sql Server,Integrated Security,我们有一些公司内部网用户使用WinForms应用程序在SQL server支持的系统上工作。设置了集成安全性,允许所有用户更新和删除权限,其中应用程序安全性限制了表更新的方式和位置 但是,有些用户是高级用户,可以使用SQL查询工具,直接访问数据库以生成报告。但是,使用集成安全性,当应用程序将规则应用于更新时,它们在不应有的表上具有默认更新权限 这是一个更适合为应用程序提供中央SQL身份验证登录的示例,同时用户可以获得集成安全性的只读权限吗?从您的问题措辞来看,我认为您的应用程序直接执行SQL语句

我们有一些公司内部网用户使用WinForms应用程序在SQL server支持的系统上工作。设置了集成安全性,允许所有用户更新和删除权限,其中应用程序安全性限制了表更新的方式和位置

但是,有些用户是高级用户,可以使用SQL查询工具,直接访问数据库以生成报告。但是,使用集成安全性,当应用程序将规则应用于更新时,它们在不应有的表上具有默认更新权限


这是一个更适合为应用程序提供中央SQL身份验证登录的示例,同时用户可以获得集成安全性的只读权限吗?

从您的问题措辞来看,我认为您的应用程序直接执行SQL语句。如果可以对其进行重构,使其执行存储过程,则可以授予过程的exec权限,并拒绝直接更新表。但这可能是不可能的,这取决于你的应用程序的功能。

我个人会通过存储过程访问所有应用程序数据。我会将集成安全设置为只允许用户运行SP,而不直接操作数据

可以向DB管理员提供高级访问权限,以便在需要时直接操作数据


基于组的权限将为您提供更大的访问权限灵活性,并在使用集成安全性控制这些权限时减少管理负担。

sql身份验证是一种选择。存储过程是另一种。但是,构建更细粒度的角色,以便将适当的权限分配给适当的用户类型,这才是您真正应该关注的

此外,我将完全避免让这些用户直接访问数据库。撇开安全原因不谈,对于一个不精通SQL的用户来说,意外执行一个查询将淹没您的数据库服务器并创建有效的拒绝服务并不需要太多。即使是职业选手也可能偶尔会这样做


相反,允许他们访问reporting services或analysis services类型的解决方案,或者使用复制来允许他们访问数据的克隆。这样可以保护您的生产系统。

正如Jon所提到的,存储过程可以为您提供直接修改表的保护。还有其他选择。您可以使用SQL Server的“应用程序角色”(通过sp_setapprole proc)。这使您能够继续为每个人使用单独的ID,但只有在应用程序连接时(通过前端),用户的权限才会被提升

使用共享ID的一个主要缺点是,您无法知道谁正在向服务器提交SQL,尽管如果它们都是内部的,您可以访问机器名

不过,还有一些事情值得关注。听起来您的用户可以连接到数据库并随意运行查询。由于用户在直接连接的SQL会话中的行为,应用程序中存在停机的主要风险。如果你能做到这一点,你可能想尝试创建一个报告数据库,并在你的企业可以容忍的时间间隔(即每天)进行更新。嗯