SQL Server 新建的用户看不到数据库

在SQL Server中,当我们新建一个用户时,有时候会出现用户无法看到数据库的情况。这个问题的出现通常有两个原因:权限问题和数据库级别的设置问题。本文将针对这两个方面进行详细讨论,并给出相应的解决方法。

权限问题

首先,我们需要确认新建的用户是否拥有足够的权限来访问数据库。在SQL Server中,用户必须至少拥有以下权限之一才能看到数据库:

  • sysadmin:系统管理员拥有对SQL Server中所有数据库的完全访问权限。
  • dbcreator:数据库创建者拥有对所有数据库的创建和删除权限。
  • db_owner:数据库所有者拥有对特定数据库的完全访问权限。
  • db_datareader:数据库读取者拥有对特定数据库的只读权限。

如果新建的用户没有上述权限之一,那么他将无法看到数据库。

解决方法

要解决权限问题,我们可以通过以下步骤进行操作:

  1. 使用系统管理员账户登录SQL Server。
  2. 执行以下SQL语句,将新建的用户添加为数据库所有者:
USE [master]
GO
ALTER AUTHORIZATION ON DATABASE::<数据库名> TO <新建用户>
GO

其中,<数据库名>是要授权给新建用户的数据库名,<新建用户>是要添加为数据库所有者的用户名。

  1. 在SQL Server Management Studio中,刷新数据库列表,新建的用户将能够看到被授权的数据库。

数据库级别的设置问题

除了权限问题,数据库级别的设置也可能导致用户无法看到数据库。

解决方法

要解决数据库级别的设置问题,我们可以执行以下步骤:

  1. 使用系统管理员账户登录SQL Server。
  2. 执行以下SQL语句,将数据库设置为可见状态:
USE [master]
GO
ALTER DATABASE <数据库名> SET READ_COMMITTED_SNAPSHOT ON
GO

其中,<数据库名>是要设置为可见的数据库名。

  1. 在SQL Server Management Studio中,刷新数据库列表,新建的用户将能够看到被设置为可见的数据库。

示例

以下是一个示例,演示了如何解决新建用户看不到数据库的问题。

  1. 首先,我们先创建一个新的数据库并添加一些数据:
CREATE DATABASE TestDB
GO

USE TestDB
GO

CREATE TABLE Customers (
    ID INT PRIMARY KEY,
    Name VARCHAR(100)
)
GO

INSERT INTO Customers VALUES (1, 'John')
INSERT INTO Customers VALUES (2, 'Jane')
GO
  1. 然后,我们新建一个用户,并尝试查看数据库:
CREATE LOGIN TestLogin WITH PASSWORD = 'TestPassword'
GO

USE TestDB
GO

CREATE USER TestUser FOR LOGIN TestLogin
GO

-- 此时,TestUser无法看到TestDB

  1. 接下来,我们使用系统管理员账户登录SQL Server,并将新建用户添加为数据库所有者:
USE [master]
GO
ALTER AUTHORIZATION ON DATABASE::TestDB TO TestUser
GO

  1. 在SQL Server Management Studio中,刷新数据库列表,我们发现新建用户现在可以看到TestDB了。

通过以上步骤,我们成功解决了新建用户无法看到数据库的问题。

结论

在SQL Server中,新建的用户无法看到数据库通常是由于权限问题和数据库级别的设置问题所致。通过授予新建用户足够的权限和设置数据库为可见状态,我们可以解决这个问题。希望本文对您有所帮助。