我刚刚进入了一个开发项目,其中开发人员使用相同的 SQL Server 登录名连接到中央数据库以进行工作。我以前从未遇到过这种情况,因为每个开发人员通常都有自己的登录名。
我在运行MySQLTuner.pl时看到这些:
-------- Security Recommendations -------------------------------------------
[!!] User '@debian' has no password set.
[!!] User '@localhost' has no password set.
------------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
谢谢
我有另一个数据库 Ydb 访问数据库 Kdb 中的数据。他们都有相同的所有者。
为了允许跨数据库链接,我似乎需要在 Kdb 中启用来宾用户。
我是这样做的:
USE [master];
GO
ALTER DATABASE Ydb SET DB_CHAINING ON;
ALTER DATABASE Kdb SET DB_CHAINING ON;
GO
USE [Kdb]
GO
GRANT CONNECT TO guest;
Run Code Online (Sandbox Code Playgroud)
我意识到这意味着由 Ydb 的所有者创建的 Ydb 中的存储过程可以在由同一登录名创建时自由访问 Kdb 中的对象。这会开启什么样的攻击?
SQL Server 2008 R2
我们有一个名为“JoeBlogs”的登录和用户,这个用户有它自己的默认schemaJoeBlogs——它Public只能访问数据库。
然后我们SELECT在一个dbo视图上授予它-dbo但是该视图从属于非 dbo模式的基础表中选择数据- 所以我们从视图中选择数据时出现错误,说明对基础表的访问被拒绝。
如何将用户配置为对dbo视图有选择访问权限,但对底层非 dbo表没有访问权限?
这甚至可能吗?
乔丹
我将两个应用程序迁移到新服务器。其中一个工作没有任何问题,但另一个遇到了后端 sql 权限问题,例如
对象“aspnet_CheckSchemaVersion”的 EXECUTE 权限被拒绝
我可以找到为什么一个应用程序可以工作而另一个不工作的原因。它们都在同一个应用程序池下运行,但使用不同的数据库。我不必为一个工作做任何事情,对于另一个我必须为每个表授予[网络服务]用户的权限,应用程序访问的存储过程。
好吧,我现在通过为网络服务设置两个数据库安全来解决这个问题。我不知道为什么我必须为一个应用程序执行此操作,而另一个应用程序不需要它。我的问题是
SQL Server Management Studio 中的 SQL Server 安全性是什么?当您单击用户 -> 属性然后转到左侧的第二页时,您基本上可以访问它们。
它是干什么用的? 它的正确用途是什么?
来自微软
证券
Run Code Online (Sandbox Code Playgroud)Lists the securables on which specific permissions have been granted or denied to this principal.

多年来,我一直作为 SQL Server 的开发人员工作,但没有问“什么是dbo”这个问题,这很遗憾。最近一直在研究SQL Server 2008的安全模型,被很多概念淹没了。请为我澄清一些概念,并纠正我的错误。我不需要对所有事情进行彻底的解释,只需要一个想法是什么以及所涉及的关系:
LOGIN: Server level (SQL Server login or Windows login).
USER: Database level (a user is mapped to a login).
ROLE: Users belong to a role. Can be at server level or at database level
with permissions attached.
SCHEMA: Database objects belong to a schema (or dbo by default)
PERMISSION:
For database objects or schema. A user or a role has permissions for
an object or a schema.
OWNER: Is it the user …Run Code Online (Sandbox Code Playgroud) 我在 TFS 2012 中有一个 SQL Server 数据库项目 (.NET 4.5)。作为 DBA,我正在寻找一种机制,开发人员可以通过该机制创建“CREATE USER”sql 脚本并在数据库中分配他们的权限以匹配应用程序,而无需需要知道它最终映射到什么登录名。这是因为我想隐藏实时和测试环境中的登录名,并让 DBA 根据需要在每个环境中创建这些登录名。
如果我进入项目并创建一个新用户,即 [MyApplication],则默认脚本建议使用以下模板:
CREATE USER [MyApplication]
WITHOUT LOGIN
WITH DEFAULT_SCHEMA = dbo
GO
Run Code Online (Sandbox Code Playgroud)
这很棒,因为我可以创建一个映射到无登录的用户,然后在部署时我可以运行:
ALTER USER [MyApplication] WITH LOGIN=[MyApplicationLogin], Name=[MyApplication]
Run Code Online (Sandbox Code Playgroud)
只要将用户映射到 SQL 登录名就可以了。如果登录要映射到 Windows 登录,当我们尝试重新映射时,SQL 会抛出错误:
Msg 33016, Level 16, State 1, Line 1
The user cannot be remapped to a login. Remapping can only be done for users that were
mapped to Windows or SQL logins.Run Code Online (Sandbox Code Playgroud)
所以问题是,在项目中设置它的最佳方法是什么,以便开发人员可以创建一个用户,该用户可以在数据库用户中任意命名,然后我们将如何将其重新映射到 Windows 身份验证登录?
提前致谢!
我认为,对于 SQL Server,我认为您可以通过特定约束提升用户权限。
例如,您需要用户在特定模式中创建特定表对象。您可以将创建表包装在存储过程中并仅授予他们访问权限,而不是授予他们批发创建表权限。通过这种方式,他们将被限制为仅创建在过程中指定的对象,并且对数据库没有任何直接的创建表权限......至少我知道它可以通过选择、插入、更新、删除以这种方式工作。存储过程中的 Create Table 语句引发 Permission Denied 错误。
我是错了还是只是做错了什么?
我有多个服务器,其中 4 个安装了ReportServer&ReportServerTempDB数据库的报告服务。
几天前,我正在为新登录设置安全性,我发现RSExecRole我的开发服务器(在reportserver数据库中)中缺少该角色。它存在于ReportServerTempDB, master&msdb数据库中。
我找到了一种在msdn上的master&msdb数据库上创建它的方法,
但它并没有帮助我使用与我运行的其他环境类似的所有安全和属性来创建它。reportserver
有没有人遇到过这个问题?任何人都可以帮我写一个脚本并解释一下这个角色吗?
当我使用浏览器连接到某个电子商务网站时,我使用的 HTTPS 使用的证书(或多或少)保证example.com确实是example.com.
现在我连接到 Internet 上某处的 SQL Server - 例如它可能是 SQL Azure,然后我只连接到像abcdef.database.windows.net. 有可能那里有一个假服务器,然后我暴露了我的敏感数据。我没有发现任何证据表明在连接到 SQL Server 时使用了证书或任何等效物。
如何确保 SQL Server 主机标识?
security ×10
sql-server ×6
cryptography ×1
identity ×1
mysql ×1
permissions ×1
schema ×1
ssms ×1
ssrs ×1
terminology ×1
view ×1