我在 SQL Azure 中创建了一个架构,并向数据库角色授予了以下权限:
CREATE ROLE myrole AUTHORIZATION dbo;
EXEC sp_addrolemember 'myrole', 'myuser';
CREATE SCHEMA myschema AUTHORIZATION dbo;
GRANT ALTER, CONTROL, DELETE, EXECUTE, INSERT, REFERENCES, SELECT, UPDATE, VIEW
DEFINITION ON SCHEMA::myschema TO myrole;
GRANT CREATE TABLE, CREATE PROCEDURE, CREATE FUNCTION, CREATE VIEW TO myrole;
Run Code Online (Sandbox Code Playgroud)
通过上面定义的权限myuser
可以创建/删除自己的模式,所以为了克服这个问题我尝试了 ALTER ANY SCHEMA 权限。但此权限也拒绝用户创建/删除表。
需要什么权限才能允许用户在他自己的架构中做任何事情,但不能创建或删除架构本身?
我让用户看到了他们不应该看到的链接服务器。
链接服务器被定义为只有我可以访问它,但每个人都可以看到和使用它。
我使用以下步骤创建了新的链接服务器:
Server Objects
,右击Linked Servers
和左键单击New Linked Server...
General
选项卡中选择SQL Server
了Server type
和写入服务器的名称Security
上半部分的选项卡下单击Add
,选择“sa”为Local Login
,输入Remote User
名称和Remote Password
Security
下部选项卡下(下For a login not defined in the list above, connections will:
)选择第一个选项:Not be made
OK
并开始测试现在唯一应该看到链接服务器的人是我(“sa”),但不知何故其他用户可以看到并使用它。
注1:可以使用链接服务器的用户在远程服务器上有权限,他们不会看到他们不应该看到的数据,他们只能在他们不应该看到的时候从链接服务器访问它。
注 2:我是这sysadmin
两个实例中唯一的一个。
我们有一个相当大的 MS SQL 2008R2 数据库,它驻留在 SSD 驱动器上。驱动器本身只有大约 110Gb 的空间,并且数据库文件是驱动器上唯一的文件。
数据库处于“简单”恢复模式,只有两个文件,.MDF 和.LDF。
磁盘现在几乎已满:MDF 目前的大小为 109Gb。但是,SSMS 告诉我有将近 18Gb 的“可用空间”(在“常规”属性页面中),如果我完成Shrink
文件的操作,它还会告诉我有 18Gb 的可用空间。SSMS 还告诉我数据库大小约为 132Gb,这让我感到惊讶 - 这不适合驱动器!
从我所读到的,这shrink
是一个非常糟糕的主意。但是,我开始看到复制错误 ( could not allocate space for object
)。我们之前曾尝试缩小数据库,但在几个小时内,文件又恢复到原来的大小。
我们应该如何进行 - 鉴于显然有 18Gb 的可用空间,SQL 是否应该自动使用该可用空间?或者就这么简单:我们真的需要更多的磁盘空间?