我从政府机构的信息系统中请求概念图式用于我的研究。我的请求因存在安全风险而被拒绝。
我真的没有丰富的数据库经验,所以我无法验证这个说法。公开你的架构真的有那么大的安全风险吗?我的意思是,这些非常抽象,并且与硬件和软件实现脱节。对攻击者如何利用概念模式的解释将不胜感激。谢谢。
我发现MySQL 提供的特权列表有点让人不知所措。我不确定谁应该拥有什么特权。在我看来,我的情况有三个典型的用户:
root developer applicationroot是不言自明的。对于developer此用户需要能够轻松访问任何数据库,对其进行调整等。对于初学者,我将此用户设置为此权限集:
SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER ON
Run Code Online (Sandbox Code Playgroud)
application有一个更有限的集合。它应该仅限于操作特定的数据库。
我不确定要授予哪些合理的特权。授予开发人员和应用程序的合理权限集是什么?为什么?
我正在编写一个程序,需要我分配所有权限和代码中的所有内容。我被困在这部分:

我只想为 msdb 数据库单击“映射”下的小框并将该用户分配给 SqlAgentUser 角色。我需要一个能够添加/编辑 SQL Server 代理作业的用户。我可以使用 SSMS 获得正确的设置,但我一生都无法弄清楚如何在原始 SQL 中进行设置。
我已经查看了ALTER LOGIN,但没有看到任何可以满足我需要的东西。我怀疑我只是不知道 Google 的正确术语。我一般不会做这种事。
任何帮助深表感谢!
我想创建一个登录,该登录被拒绝写入任何数据库的能力 - 不仅仅是今天存在的数据库,还有任何新创建的数据库或从其他服务器恢复的数据库。
我不能使用仅限数据库的角色(甚至不能在模型中使用),因为这些角色不会对新恢复的数据库生效。
(商业目的:我正在写一篇关于人们如何为自己设置低权限的新登录的博客文章,并且他们可以确保他们在复制/粘贴代码时不会意外地有“哎呀”时刻或者在没有 where 子句的情况下运行它。)
我知道我可以使用sys.fn_my_permissions以下方法查询有效权限:
USE myDatabase;
SELECT * FROM fn_my_permissions('dbo.myTable', 'OBJECT')
entity_name | subentity_name | permission_name
------------------------------------------------
dbo.myTable | | SELECT
dbo.myTable | | UPDATE
...
Run Code Online (Sandbox Code Playgroud)
这告诉我当前用户myTable在数据库中是否具有 SELECT、INSERT、UPDATE 等权限myDatabase。
是否可以很容易地找出为什么用户拥有这些权限?例如,我希望有一个fn_my_permissions_ex输出附加reason列的函数:
USE myDatabase;
SELECT * FROM fn_my_permissions_ex('dbo.myTable', 'OBJECT')
entity_name | subentity_name | permission_name | reason
------------------------------------------------------------------------------------------------------------------------------------
dbo.myTable | | SELECT | granted to database role public
dbo.myTable | | UPDATE | member of group MYDOMAIN\Superusers, which belongs to database role db_datawriter
... …Run Code Online (Sandbox Code Playgroud) 我知道我们可以使用 SQL Server 中的 GUI 检查登录名和定义的用户,但我想知道如何使用脚本进行此检查。
我运行了下面的查询,但它显示了 Principal_id,我不确定如何映射以获得权限级别。
SELECT * FROM Sys.login_token
Run Code Online (Sandbox Code Playgroud)
那么是否有任何内置的存储过程可以列出登录名和具有权限级别的用户?
谢谢你。
你们可能知道,SQL Server 没有提供开箱即用的解决方案来导出为数据库中的每个元素声明的所有安全相关语句(在数据库级别和对象级别)
我说的是提供这些信息的能力
您可能会认为 SQL Server 必须有类似的东西,但 SQL Server 导出向导或因右键单击对象而生成的各种脚本都不会捕获此信息。
我在网上看到许多不同的“可能的解决方案”使用人们慷慨发布的非策划脚本,但由于我必须 100% 确定所有安全信息都被捕获,因此我不能完全依赖这些脚本。
我可以选择使用这些作为自己编写一些东西的起点,但我讨厌必须重新发明轮子来满足您认为很多人可能有的要求。
是否有人提供的工具(作为 SQL Server 产品的一部分或第三方工具)可以可靠地为您提供此信息?
或者至少,是否有大多数人会同意“将完成这项工作”的社区支持脚本?
谢谢!
我希望在我的生产环境中部署日志传送。这意味着我将不得不管理备份链,这些备份链可能会被人们进行备份以刷新开发环境而中断。如果我遇到故障并想使用日志备份恢复到某个时间点,我还需要开发人员进行备份。
如果开发人员仅使用 COPY ONLY 备份,则不会发生这种情况。所以我的问题是:有没有办法限制用户只能执行 COPY ONLY 备份?
我习惯使用的应用程序是基于服务器的,并为许多用户使用一个数据库帐户,应用程序代码控制用户可以做什么,或者是单用户。
是否有任何成功的复杂业务应用程序,其中每个人都需要自己的数据库帐户,并且依赖数据库服务器来强制执行有关每个用户应该允许和不允许做什么的策略规则?
我正在考虑多个人为一个数据库中的信息做出贡献的应用程序,并且可以访问其他人存储的信息 - 例如,组织中的同事都需要访问客户记录。
还有这种类型的设置的名称吗?
我们发现 SQL "sa" 帐户的使用方式不该使用,因此我们正在更改所有 SQL 实例的 sa 密码。
(我们有 SQL 2005 到 2017 服务器以混合身份验证模式运行。所有用户和应用程序都应该使用域帐户或非 sa SQL 帐户进行连接。我一直在监视,但没有发现任何其他应用程序、用户或非- 使用 sa 帐户的内部 spid。)
几个问题:
Q1:更改 sa 密码是否需要重新启动 SQL?
我发现一些参考资料说更改 sa 帐户密码后需要重新启动 SQL 服务:
真的吗?还是仅当我更改身份验证模式时?还是仅当我经常以 sa 身份登录时?
这个 SQL Server Central 线程甚至建议更改它可能会影响现有的 SQL 代理作业和其他东西;这是一个问题吗?或者仅当有人将 SA 帐户硬编码到 SSIS 包中时?
(以防万一,我们为 SQL 服务和 SQL 代理服务使用域帐户,为调用 SSIS 包或 PowerShell 脚本的作业使用域代理帐户。)
问题 2:我可以以“正常”方式更改 sa 密码吗?
我可以像重置任何其他帐户一样重置它吗?使用 SSMS,或更可能通过:
ALTER LOGIN sa WITH PASSWORD = 'newpass'; …Run Code Online (Sandbox Code Playgroud) security ×10
sql-server ×7
permissions ×2
backup ×1
ddl ×1
debugging ×1
export ×1
logins ×1
mysql ×1
t-sql ×1