Sql server 2008 仅将SQL Server登录访问限制为一个数据库
我有一个Sql server 2008 仅将SQL Server登录访问限制为一个数据库,sql-server-2008,login-control,Sql Server 2008,Login Control,我有一个sqlserver服务器,上面有大约50个数据库 我希望为希望访问其数据库的客户创建一个新的登录名 但我不想让他们访问其他49个数据库 我该怎么做 使用management studio连接到SQL server实例 转到安全->登录->(右键单击)新登录 填写用户详细信息 在“用户映射”下,选择希望用户能够访问和配置的数据库 更新: 您还需要转到Security->Server Roles,对于public,通过/TSQL Local Machine/TSQL Named Pipes
sqlserver
服务器,上面有大约50个数据库
我希望为希望访问其数据库的客户创建一个新的登录名
但我不想让他们访问其他49个数据库
我该怎么做
更新:
您还需要转到
Security->Server Roles
,对于public
,通过/TSQL Local Machine/TSQL Named Pipes检查TSQL Default TCP/TSQL Default的权限
,并删除connect
权限,其他人不知道该怎么做,我为SQL Server 2008 R2及更高版本提供了以下解决方案:
USE master
go
DENY VIEW ANY DATABASE TO [user]
go
这将完全满足上述要求 我认为这是我们非常喜欢做的事情
--Step 1: (create a new user)
create LOGIN hello WITH PASSWORD='foo', CHECK_POLICY = OFF;
-- Step 2:(deny view to any database)
USE master;
GO
DENY VIEW ANY DATABASE TO hello;
-- step 3 (then authorized the user for that specific database , you have to use the master by doing use master as below)
USE master;
GO
ALTER AUTHORIZATION ON DATABASE::yourDB TO hello;
GO
如果您之前已经创建了一个用户并分配给该数据库
USE [yourDB]
CREATE USER hello FOR LOGIN hello WITH DEFAULT_SCHEMA=[dbo]
GO
然后,请通过执行以下操作并按照步骤删除它
USE yourDB;
GO
DROP USER newlogin;
GO
有关更多信息,请访问以下链接:
这是对正确答案的补充。它缺少一个步骤,如果不完成,用户仍然可以访问数据库的其余部分。 首先,按照@DineshDB的建议去做
1. Connect to your SQL server instance using management studio
2. Goto Security -> Logins -> (RIGHT CLICK) New Login
3. fill in user details
4. Under User Mapping, select the databases you want the user to be able to access and configure
缺少的步骤如下所示:
5. Under user mapping, ensure that "sysadmin" is NOT CHECKED and select "db_owner" as the role for the new user.
就这样。谢谢你的回复。我以这种方式创建了一个新用户,尝试在SSMS2008中与他们一起登录,并且我可以完全访问所有数据库…Hi Curt-这将与服务器级别和数据库级别上通过public或guest的默认访问设置有关。请尝试上面的方法,如果这不起作用,我可以提出一些其他建议(但上次我解决了这个问题),确保相关用户的属性中没有设置为“sysadmin”。我有几个用户没有映射到数据库,但仍然具有访问权限。我认为这等于“has login inside database users”这个命令将阻止对所有50个数据库的访问,请同时提供其他必需的语句……现在,如果不能首先拒绝所有数据库,您会怎么做?其中,oposite只限制对一个特定数据库的访问。