正如SQL Server 最佳实践所说,“ Windows 身份验证模式比 SQL 身份验证更安全”。现在我想知道:有没有办法保护 SQL Server 免受具有 Windows 管理员权限的用户的攻击?
我试图找出谁更改了 SQL Server 2008 R2 中的登录密码。
我已经检查了默认跟踪 - 它没有记录该事件。默认跟踪将包括这些与安全相关的事件:
/*
Audit Add DB user event
Audit Add login to server role event
Audit Add Member to DB role event
Audit Add Role event
Audit Add login event
Audit Backup/Restore event
Audit Change Database owner
Audit DBCC event
Audit Database Scope GDR event (Grant, Deny, Revoke)
Audit Login Change Property event
Audit Login Failed
Audit Login GDR event
Audit Schema Object GDR event
Audit Schema Object Take Ownership
Audit Server Starts …Run Code Online (Sandbox Code Playgroud) 在 SQL Server 中使用 CLR 是否存在任何特定的安全或性能风险?
我最近进入了一个环境,其中许多数据库登录都没有enforce_password_policy启用该标志。
即将进行的审计需要验证这些登录的密码。
我使用以下查询来获取登录列表以及标志是打开还是关闭。
select
@@SERVERNAME as servername,
name,
IS_SRVROLEMEMBER('sysadmin', name) as SYSADMIN,
type_desc,
create_date,
is_policy_checked,
is_disabled,
password_hash,
PWDCOMPARE(name, password_hash) as UsernameAsPassword
FROM sys.sql_logins
Run Code Online (Sandbox Code Playgroud)
但是,这并不能告诉我密码是否确实符合密码策略,因为该标志仅在创建用户时相关。
是否有已知的方法来测试现有用户的密码策略合规性?
我无法访问旧密码,我更喜欢不需要它们的方法。
在具有足够 RAM 和快速磁盘的 SQL Server 2014 实例上,有 160 多个用户可以访问数据库。出于某种我不知道的原因,DROP USER [username]在这个数据库中运行命令每个用户最多需要 5 秒。
将用户重新映射到登录并恢复他们的权限非常快。
在从生产中刷新 DEV 数据库的上下文中,我必须删除并重新创建所有数据库用户。所以是的,删除数据库用户并重新创建它们是必要的。
DROP USER命令?请记住,对于我正在编写的实例,我必须运行它超过 160 次。
这是我正在使用的 SQL:
DECLARE drop_user_cur CURSOR FOR
SELECT name FROM #drop_users
OPEN drop_user_cur
FETCH NEXT FROM drop_user_cur INTO @user
WHILE @@FETCH_STATUS = 0
BEGIN
SET @sql = 'use [' + @db_name + '] DROP USER [' + @user + ']'
BEGIN TRY
print @sql
EXECUTE(@sql)
END TRY
BEGIN CATCH
print 'ERREUR : ' + @sql …Run Code Online (Sandbox Code Playgroud) 我们最近遇到了一个问题,其中dbo数据库中的用户具有sid与owner_sidin不匹配的sys.databases。我了解数据库的所有者与角色的成员有何不同,db_owner但我一直认为用户dbo是数据库的实际所有者。不是这样吗?如果是的话有没有之间的任何真正的差异dbo,什么是中sys.databases?
什么是用于动态 sql 生成的安全引用标识符的 SQL Server 方法。
quote_identifierquote_ident我如何确保为动态生成的语句提供动态生成的列名,该列本身不是 SQL 注入攻击。
假设我有一个 SQL 语句,
SELECT [$col] FROM table;
Run Code Online (Sandbox Code Playgroud)
本质上与
'SELECT [' + $col + '] FROM table;'
Run Code Online (Sandbox Code Playgroud)
什么可以阻止注入攻击
$col = "name] FROM sys.objects; \r\n DROP TABLE my.accounts; \r\n\ --";
Run Code Online (Sandbox Code Playgroud)
导致
SELECT [$col] FROM table;
Run Code Online (Sandbox Code Playgroud) 将数据库从一个实例还原到另一个实例时,有时必须将 SQL Server 登录名重新链接到数据库用户。
这通常是通过以下程序之一来实现的。
use <database>
go
sp_change_users_login 'Update_one', '<datbase_user>', '<sql server login>'
go
Run Code Online (Sandbox Code Playgroud)
use <database>
go
ALTER USER [<datbase_user>] WITH LOGIN = [<sql server login>]
go
Run Code Online (Sandbox Code Playgroud)
这些命令会将孤立的数据库用户重新链接到相应的 SQL Server 登录名。
是否可以在不删除 SQL Server 登录名或数据库用户的情况下打破这种关系?
我已经查看了DMVsys.database_principals和sys.server_principalsDMV,但它们不可修改。
我今天对我的数据库进行了漏洞评估。我找到了 VA2108,它建议我
ALTER ROLE [db_owner] DROP MEMBER [dbo]
Run Code Online (Sandbox Code Playgroud)
但它是任何 SQL 实例的默认设置。
我应该去吗?有什么风险吗?
谢谢
security sql-server azure-sql-database vulnerability-assessment
所以我试图在我的 Microsoft SQL Server Management Studio 2019 中更改一些设置。我将登录模式从混合(Windows 和 SQL 身份验证)更改为仅 Windows,现在我无法使用我的 sa 帐户登录,我没有拥有另一个具有管理员权限的帐户。
我该怎么办?任何建议将不胜感激。