标签: logins

如何将默认数据库更改为所有登录名?

我对 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-server t-sql logins

6
推荐指数
1
解决办法
7221
查看次数

如何判断我在通过 Windows 身份验证登录时使用了哪个 Windows 组登录名

我创建了两个对应于两个 Windows 组的 SQL Server 登录名:

MachineName\MyAppAmdin
MachineName\MyAppUser
Run Code Online (Sandbox Code Playgroud)

然后在数据库中,我创建了两个具有相同名称的用户并将它们映射到登录名。

在 Windows 服务器中,我将我的域帐户添加MyDomain\MyAccountMachineName\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 实现类似结果的方法。

security sql-server t-sql sql-server-2012 logins

6
推荐指数
1
解决办法
2555
查看次数

SQL Server - 包含的数据库用户密码过期如何工作?

我最近开始使用包含的数据库,但我不明白包含的数据库用户是否/如何拥有过期的密码。

MSDN 文档说他们这样做 - 使用 SQL Server 登录,有强制密码过期的选项框,但对于包含的数据库用户来说,这不存在(据我所知)。

这些包含的数据库帐户已经存在一段时间了,我们的域策略是每 6 个月重置一次密码,但我们从未更改过这些密码,而且应用程序在过去几年中使用相同的密码连接得很好。

我的第一个问题是我怎么知道对包含的数据库用户强制执行“密码过期”?对于 SQL 登录is_expiration_checkedsys.sql_logins.

使用传统的 SQL 登录,我可以使用以下函数来获取更改 SQL Server 登录的时间

LOGINPROPERTY('login','PasswordLastSetTime')  
Run Code Online (Sandbox Code Playgroud)

包含的数据库用户是否有类似的东西?

sql-server logins password contained-database

6
推荐指数
1
解决办法
497
查看次数

如何创建只能访问一个数据库中一个模式的登录名和用户

我执行了以下操作:

USE [MyDatabase];
GO
CREATE LOGIN [MyDomain\MyAccount] FROM WINDOWS WITH DEFAULT_DATABASE=[MyDatabase];
CREATE USER [MyDomain\MyAccount] FOR LOGIN [MyDomain\MyAccount];
GRANT EXECUTE   ON SCHEMA::[MySchema] TO [MyDomain\MyAccount];
GRANT SELECT    ON SCHEMA::[MySchema] TO [MyDomain\MyAccount];
GRANT INSERT    ON SCHEMA::[MySchema] TO [MyDomain\MyAccount];
Run Code Online (Sandbox Code Playgroud)

(我没有授予任何角色,因为我不希望此登录名能够访问此数据库中的任何其他架构。)

我以 MyDomain\MyAccount 的身份运行 SSMS(以不同的用户身份运行)。然后我尝试连接到这个实例。但是,我得到:

无法打开用户默认数据库。登录失败。用户
“MyDomain\MyAccount”登录失败。(Microsoft SQL Server,错误:4064)

如果我在连接属性中将默认数据库设置为 MyDatabase,我会得到相同的结果。

我运行了 Profiler 跟踪并看到错误 18456 状态 38:

用户“MyDomain\MyAccount”登录失败。原因:无法打开明确指定的数据库“MyDatabase”。[客户:MyIpAddress]

接下来是错误 18456 状态 40:

用户“MyDomain\MyAccount”登录失败。原因:无法打开登录属性中指定的数据库“MyDatabase”。[客户:MyIpAddress]

MyDatabase 在线,我可以使用其他登录名轻松连接到它。我需要向 MyDomain\MyAccount 授予哪些额外权限?还有什么我想念的吗?

schema sql-server permissions sql-server-2012 logins

5
推荐指数
1
解决办法
1861
查看次数

显示表的所有权限的脚本

在我的数据库中,我有一个名为 spGen2_tblIE_SchedProcess_Update 的过程。

当我运行这个脚本时

select * from sys.objects
where name = 'spGen2_tblIE_SchedProcess_Update'
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

在同一个数据库中,我有一个名为 tblIE_Step 的表

当我运行以下脚本时

select * from sys.objects
where name = 'tblIE_Step'
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

然后我想查看对象的所有权限

当我检查我的存储过程时,我运行了这个脚本:

select 'Proc' = SCHEMA_NAME(p.schema_id)+'.'+p.name
    , 'Type' = per.state_desc, 'Permission' = per.permission_name
    , 'Login' = pri.name, 'Type' = pri.type_desc 
    , *
From sys.objects as p
left join sys.database_permissions as per on p.object_id = per.major_id
left join sys.database_principals as pri on per.grantee_principal_id = pri.principal_id
where p.object_id = 87671360
Run Code Online (Sandbox Code Playgroud)

我得到了权限:

在此处输入图片说明

但是当我为我的桌子运行相同的东西时,我什么也没得到:

select 'Proc' = SCHEMA_NAME(p.schema_id)+'.'+p.name …
Run Code Online (Sandbox Code Playgroud)

sql-server permissions scripting logins automation

5
推荐指数
2
解决办法
5万
查看次数

使用 SQL 登录名的人是谁?

是否可以找出谁使用了 SQL-Server 登录?

让我们假设我们怀疑有人滥用 SQL 登录名,该登录名本应由应用程序仅用于登录 SQL-Server。使用SQL登录的域用户是否记录在任何地方,以便我们得出谁使用它的结论?

authentication sql-server sql-server-2008-r2 users logins

5
推荐指数
2
解决办法
2996
查看次数

您如何列出 Sql Azure 的所有登录信息?

我可以使用哪些查询来列出 SQL Azure 中服务器和数据库的所有登录信息?

我试过跑步,select * from sys.sysusers但我猜这只是向用户展示

azure-sql-database users logins

5
推荐指数
1
解决办法
7699
查看次数

ORA-01017: 无效的用户名/密码;登录被拒绝

还有其他类似的问题被问到,但没有一个能告诉我为什么我不能使用我站起来的 C# .NET 网站进行连接。虽然我知道这个论坛更适合 DBA 使用工具连接到数据库,而不是解决应用程序连接问题,但我想我会在这里发布这个问题。

当从 Visual Studio 运行时,该网站从我的工作站工作/连接,但是当我将其发布到服务器时,它给了我ORA-01017: invalid username/password;logon denied错误,即使我可以使用相同的帐户/密码通过其他所有内容进行连接。情况:

  1. 我可以使用 Oracle SQL Developer、SQL*Plus 与我正在使用的帐户进行连接……我们称之为“myaccount”。
  2. 使用网络管理器,我可以展开“服务命名”并查看 tnsnames.ora 中的条目。
    一种。存在于 tnsnames.ora/Service Naming 区域中的相同字符串作为硬编码字符串存在于我的应用程序中,但传递的主机名、服务名、端口、用户名和密码除外 -作为来自我的 web.config 的参数。
    湾 我可以单击一个连接名称并且一切都正确显示,然后单击“测试服务”>“更改登录”>输入“myaccount”和密码>单击“确定”>单击“测试”成功。
    C。我已经在我的 web.config 中仔细检查了我的参数 - 自从网站在我的本地工作站上运行以来没有任何变化。
  3. tnsping CONNECTION_NAME 成功。
  4. 两台计算机上的环境变量相同,Oracle 客户端位置也相同。
    一种。ORACLE_HOME=C:\oracle\product\12
    乙。PATH= C:\oracle\product\12\bin;.....
    c. TNS_ADMIN= C:\oracle\product\12\network\admin
    d。添加到HKLM\Software\Oracle\KEY_OraClient12Homefor TNS_ADMIN= 的注册表项C:\oracle\product\12\network\admin
  5. 我已经尝试了该ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON = FALSE;命令并重置了密码,以防万一这是问题所在。我尝试连接 myaccount 的全大写版本及其密码,以及两者的所有小写版本(两者的小写版本是我最初在我的工作站上使用时的方式)。
  6. 该帐户拥有PASSWORD_VERSIONS10G11G-如果它的事项,我使用一个12C客户端和我不知道12C …

oracle logins password oracle-12c

5
推荐指数
1
解决办法
3万
查看次数

什么会导致新恢复的 SQL 数据库显示表,但在尝试查看表数据时显示“无效对象”错误?

问题:

作为一名未经培训且非自愿的 SQL DBA,我正在使用一组 SQL 2008R2 数据库并在另一个环境中恢复到新的 SQL 2008R2 服务器。

恢复过程顺利,没有错误。当我尝试使用我们的数据库资源管理器连接到它们时,我看到数据库和表正确填充。不幸的是,当我尝试查看表的数据时,它给了我一个“无效对象”错误。

背景:

当我们过去为其他客户端执行这些操作时,我们通常会运行此脚本来“修复孤立用户”。这通常是我们运行的全部内容,然后数据库与我们的 db explorer 和软件一起工作。如果我们在 SQL 版本之间切换,我们还将使用单独的脚本更改数据库的兼容模式

use dbar;
EXEC sp_change_users_login 'update_one', 'nurse', 'nurse';
use dbarforms;
EXEC sp_change_users_login 'update_one', 'nurse', 'nurse';
use dbdoc;
EXEC sp_change_users_login 'update_one', 'nurse', 'nurse';
use dbhistory;
EXEC sp_change_users_login 'update_one', 'nurse', 'nurse';
use dbhl7;
EXEC sp_change_users_login 'update_one', 'nurse', 'nurse';
use dbmds;
EXEC sp_change_users_login 'update_one', 'nurse', 'nurse';
use dbparadox;
EXEC sp_change_users_login 'update_one', 'nurse', 'nurse';
use dbpicklist;
EXEC sp_change_users_login 'update_one', 'nurse', 'nurse';
use dbreport; 
EXEC sp_change_users_login 'update_one', 'nurse', …
Run Code Online (Sandbox Code Playgroud)

schema sql-server-2008-r2 logins

5
推荐指数
1
解决办法
75
查看次数

登录缺少 SQL Server 中的连接端点权限 - 错误 18456,状态:149

我已经设置了一个新的数据库,我可以通过 SQL Server Management Studio 连接到该数据库并像平常一样执行操作。我创建了两个帐户供我的应用程序使用,并且都可以通过 SSMS 登录。我的程序正在运行 java 并使用“mssql-jdbc-6.4.0.jre8.jar”驱动程序,当我尝试连接时,我可以在数据库日志中看到以下错误:

错误:18456,严重性:14,状态:149 用户“application_read_only_user”登录失败。原因:基于登录的服务器访问验证因基础结构错误而失败。登录缺少连接端点权限。[客户端:127.0.0.1]

我查看了多个来源试图解决这个问题。微软官方文档似乎没有列出状态 149,我在网上找到的任何结果也没有列出。

我没有修改原始设置的端点,所以我只有以下项目:

  • 专用管理连接
  • TSQL 本地机
  • TSQL 命名管道
  • TSQL 默认 TCP
  • TSQL 默认 VIA

我尝试将 SQL Server 服务设置为作为本地系统运行。

该网站上有很多类似的问题和堆栈溢出,但没有一个能够提供帮助。它们要么具有不同的状态,要么不列出状态。

sql-server logins sql-server-2017

5
推荐指数
2
解决办法
1万
查看次数