很多时候,我必须将应用程序(如 wpf)连接到数据库。在示例和任务中,这种连接通常通过 windows 帐户发生,或者,上帝保佑,通过 sa 用户发生。
如何正确连接数据库?
我的假设是,对于客户端应用程序的每个角色,您都需要在服务器上创建自己的具有权限的帐户。
例如,连接如何与 VKontakte 应用程序一起工作?我认为他们有一个特定的数据库帐户,并且管理员已经通过他们自己的帐户对其进行了深入研究,并拥有完全的权限。
编辑 1:在这种情况下,我指的是数据库角色。那些。在服务器端,必须创建为应用程序定义的角色。根据我的假设,在到数据库的连接字符串中,我可以规定适当的登录名和密码。(当然,如果我的方向是正确的)
没错 - 这样您就可以控制谁可以访问数据库(身份验证)以及他可以在那里做什么(授权)。
例如,如果您有一个直接爬入数据库本身的桌面 WPF 应用程序(这本身并不是最佳解决方案),那么您控制谁以及可以对数据库做什么的唯一方法就是在级别上进行控制数据库的用户和权限。即要么每个用户输入自己的登录名/密码(数据库认证),要么使用域认证+数据库授权。
如果您有一个网站,即最终用户甚至可能根本不知道正在使用任何数据库,那么有 2 个选项:
非个性化,当用户凭据用于访问数据库时。这在 Intranet - 私有企业网络中很常见,此时用户池是有限的并且是集中控制的。这通常是由想要了解所有用户操作直至交易的安全人员提出的。
一个更常见的选择是使用用户的身份验证数据来授权他已经在您的站点/服务上。也就是说,站点将决定用户可以使用哪些操作,但同时站点本身在整个站点的某种单一条目下进入数据库。这种方案在公共网站和各种微服务中都被广泛使用,其中每个微服务(其中可以有数百个,因此也可以有数百个数据库)自行决定用户可以做什么,不能做什么. 这使您可以减少数据库的负载,因为数据库不再对用户及其权限进行蒸汽浴。例如,在可以有多个数据库的微服务架构中,将每个用户存储在每个数据库中是很浪费的。
你的假设是正确的。
通常为角色创建至少两个帐户:
如果应用程序由几个不同的组件组成,那么应用程序角色可以进一步划分,例如,如果应用程序有一个管理面板,那么可以在那里使用一个单独的帐户,该帐户有权更改应用程序的配置表应用程序本身。可以为报告模块等创建具有只读权限的单独帐户。
数据库管理员使用具有更多权限的单独帐户。在认真对待安全性的组织中,我遇到过一种方法,为了调查生产中的问题,负责的开发人员被授予只读权限,如果需要修复某些内容,则在短时间内添加权限。