我使用以下命令在我的数据库中创建一个用户:
CREATE USER Test WITHOUT LOGIN
Run Code Online (Sandbox Code Playgroud)
我用测试名称创建了一个登录名。
我想将测试用户与测试登录联系起来。
当我使用以下命令时:
EXEC sp_change_users_login 'Update_One', 'Test', 'Test'
Run Code Online (Sandbox Code Playgroud)
SQL Server 引发了以下错误:
Msg 15291, Level 16, State 1, Procedure sp_change_users_login, Line 114
Terminating this procedure. The User name 'Test' is absent or invalid.
Run Code Online (Sandbox Code Playgroud)
当我使用以下命令时:
ALTER USER Test WITH LOGIN = Test
Run Code Online (Sandbox Code Playgroud)
SQL Server 引发波纹管错误:
Msg 33016, Level 16, State 1, Line 2
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) sql-server-2008 sql-server sql-server-2008-r2 sql-server-2012 logins
我正在尝试使用 sqlpackage.exe 实用程序部署 ssdt 项目。我收到以下错误(德语):
Fehler bei der Erstellung des Bereitstellungsplans。Die Bereitstellung kann nicht fortgesetzt werden。元素属性-类别长度在元素-oder Annotation-Klasse PersistedResolvableAnnotation中尚无定论。
这意味着…… 喜欢:
创建部署计划时出错。部署无法继续。属性类 Length 不包含在元素或注释类 PersistedResolvableAnnotation 中。
我找不到关于“PersistedResolvableAnnotation”的很多信息。但我意识到它包含在 dacpac 的 model.xml 中。
它包含一些与此类似的 SqlLogins 定义:
<Element Type="SqlUser" Name="[Angela]">
<Property Name="IsWithoutLogin" Value="True" />
<Relationship Name="DefaultSchema">
<Entry>
<References Name="[Angela]" Disambiguator="8" />
<Annotation Type="**PersistedResolvableAnnotation**" Name="[Angela]">
<Property Name="TargetTypeStorage" Value="SqlSchema" />
<Property Name="Length" Value="8" />
<Property Name="Offset" Value="62" />
</Annotation>
</Entry>
</Relationship>
</Element>
Run Code Online (Sandbox Code Playgroud)
Angela(和其他候选人)不作为 Login 存在于目标服务器上,尽管他们是目标数据库中的注册数据库用户。我期待另一个错误——如果有的话——而不是这个无用的错误。
该项目的数据库基于一个非常古老的 SQL Server 版本。是否有可能这是来自 Sql Server 版本的一些已弃用的功能/语法或属性,并且根本不受支持?有谁知道更多详情?
我注意到 SQL Server 2016 安装包括一个名为 NT SERVICE\SQLTELEMETRY 的新默认登录。我知道对于 SQL Server 2016 的免费版本,您在许可中同意允许您的服务器向 Microsoft 发送遥测信息。我猜想这个登录名与那项工作有关。作为我们新实例安装过程的一部分,我们更愿意清理和删除任何未使用的系统或默认登录,以避免潜在的安全漏洞或混乱。这个帐户是否有任何特别重要的事情,以至于我们想要保留它,如果没有,它是否会违反许可协议来禁用或删除它?我应该注意到我们的 SQL Server 通常不是面向 Internet 的。
是否有 T-sql 命令,例如 Oracle“Connect”,它可以让我更改我登录的用户?
我对 SQL Server 有点陌生,我正在尝试编写 Microsoft SQL Server (2005-2014) 安装后活动的脚本,但我在更改登录时遇到了一些困难。公司政策规定没有登录应该默认使用 master 数据库,因此我的计划是识别所有默认使用 master 的登录并将 master 更改为 tempdb。
可以使用这样的查询更改单次登录:
ALTER LOGIN [sa] WITH DEFAULT_DATABASE = tempdb
Run Code Online (Sandbox Code Playgroud)
试图在所有登录中实现这一点(不知道它们的数量和名称),我知道我很天真,希望这样的事情会起作用(但不得不尝试):
UPDATE master..syslogins
SET dbname = 'tempdb'
WHERE dbname = 'master'
Run Code Online (Sandbox Code Playgroud)
显然输出是一个错误(逻辑上):
Ad hoc updates to system catalogs are not allowed.
SQL Server 处于 MIX 身份验证模式,因此几乎所有内容都可以登录 - SQL 登录、Windows 本地或域用户或组(不确定这是否会对解决方案产生任何影响)。解决方案应该与版本无关,但是假设从 SQL Server 2005 向前启动(...是的,仍然有一些古老的版本...)
任何人都可以帮我找到合适的查询来实现这一目标吗?
考虑我有一个名为 sql_login 的登录名。登录尝试失败sql_login
后,我可以锁定登录吗5
?
当我们创建登录时,我们可以看到有一个名为密码策略检查图像的选项。但是没有提到锁定密码
在N
尝试登录失败后,Sql Server 中是否有锁定登录的选项
有没有办法根据表中的一组用户禁用多个 sql 登录?例如:
ALTER LOGIN (Select userid from tbl_user) DISABLE;
Run Code Online (Sandbox Code Playgroud) 我一直在尝试使用我的其中之一登录,sql server logins
但收到以下错误消息:
Run Code Online (Sandbox Code Playgroud)TITLE: Connect to Server ------------------------------ Cannot connect to MY_SERVER. ------------------------------ ADDITIONAL INFORMATION: Logon failed for login 'cola' due to trigger execution. Changed database context to 'master'. Changed language setting to us_english. (Microsoft SQL Server, Error: 17892) For help, click: http://go.microsoft.com/fwlink?> ProdName=Microsoft%20SQL%20Server&EvtSrc=MSSQLServer&EvtID=17892&LinkId=20476 ------------------------------ BUTTONS: OK ------------------------------
我知道下面的问题,但它略有不同,我已经尝试了那里所说的所有内容,但对我没有用,这就是我在这里提出这个问题的原因:
“由于触发器执行,登录 'sa' 登录失败。” 未定义 SA 登录触发器时
这里的这个问题也非常相似:
用户登录失败 - 错误:18456,严重性:14,状态:38
从这个我得到了以下信息:
用户登录失败 - 错误 18456 - 严重性 14,状态 38
1 'Account is locked out'
2 'User …
Run Code Online (Sandbox Code Playgroud) 我创建了两个对应于两个 Windows 组的 SQL Server 登录名:
MachineName\MyAppAmdin
MachineName\MyAppUser
Run Code Online (Sandbox Code Playgroud)
然后在数据库中,我创建了两个具有相同名称的用户并将它们映射到登录名。
在 Windows 服务器中,我将我的域帐户添加MyDomain\MyAccount
到MachineName\MyAppAmdin
组中。
现在我可以通过 Windows 身份验证通过MyDomain\MyAccount
.
问题是,我想确切地知道我正在使用哪个 Windows 组登录,但我不知道如何。
我试过:
ORIGINAL_LOGIN()
SYSTEM_USER
SUSER_SNAME
SELECT * FROM dm_exec_sessions
Run Code Online (Sandbox Code Playgroud)
以上所有内容都会返回MyDomain\MyAccount
,但我需要知道的是我是否通过MachineName\MyAppAmdin
.
总结一下,我的问题是:
有没有办法准确判断当前连接使用的是哪个 Windows 组登录(或用户)?
或者有什么方法可以检查是否MyDomain\MyAccount
与特定用户或登录名相关联?
我知道我可以使用 C# 或命令来解析域帐户是否属于特定的 Windows 组,但是我们有一些新的 IT 策略,所以我正在考虑使用 TSQL 实现类似结果的方法。
我最近开始使用包含的数据库,但我不明白包含的数据库用户是否/如何拥有过期的密码。
MSDN 文档说他们这样做 - 使用 SQL Server 登录,有强制密码过期的选项框,但对于包含的数据库用户来说,这不存在(据我所知)。
这些包含的数据库帐户已经存在一段时间了,我们的域策略是每 6 个月重置一次密码,但我们从未更改过这些密码,而且应用程序在过去几年中使用相同的密码连接得很好。
我的第一个问题是我怎么知道对包含的数据库用户强制执行“密码过期”?对于 SQL 登录is_expiration_checked
,sys.sql_logins
.
使用传统的 SQL 登录,我可以使用以下函数来获取更改 SQL Server 登录的时间
LOGINPROPERTY('login','PasswordLastSetTime')
Run Code Online (Sandbox Code Playgroud)
包含的数据库用户是否有类似的东西?
logins ×10
sql-server ×9
security ×3
t-sql ×3
password ×2
connections ×1
ddl ×1
deployment ×1
ssdt ×1
users ×1