我正在使用 MSSQL Server Management Studio 2008,我需要向第三方公开一个视图以进行数据协调。我已经创建了适当的视图,但是我在创建用户并授予该用户从视图中进行选择的适当权限时遇到了问题。
我按照向导创建了一个登录名和一个用户,然后在 Securables 部分添加了我的视图,并选中了选中的授权框。一切似乎都很好,但是当我以该用户身份登录并尝试执行“从 MyViewName 中选择 *”时,它告诉我选择权限被拒绝。
我刚刚重新创建了用户(这次只是使用 SQL 而不是向导)并明确授予了选择权限,现在它给了我错误:(Msg 916, Level 14, State 1, Line 2
The server principal "username" is not able to access the database "unrelated_db" under the current security context.我不知道为什么它试图访问不相关的数据库......)
我真的不知道从这里去哪里。同样,基本上我所需要的只是创建一个用户,我可以将其提供给第三方,让他们连接到我们的数据库并从此视图中进行选择。
我有一个VIEW我正在尝试为其创建进化脚本的地方,因此我可以向其中添加一列。那部分工作正常;列添加就好了。但是,反过来不起作用;删除最后添加的列失败并显示一条ERROR: cannot drop columns from view消息。问题是这个特定的视图有很多引用,从和到,因此我不能只是DROP CASCADE该死的东西!
是否有原因我无法从给定中删除新添加的列VIEW?那么,我该怎么做才能完成这个任务呢?
(注意:这里的情况就是它们的样子,但我可以很好地看到类似的情况,也就是在许多其他情况下从视图中删除列。)
我正在尝试备份我的整个数据库以及视图。我将使用mysqldump命令。我想知道这是否会复制所有视图,或者我将不得不使用单独的命令。
请给我一个答案。任何帮助是极大的赞赏。
这个问题必须在这个网站上:)
禁止在视图中使用 ORDER BY,正如我所理解的,因为在使用此视图时可能存在多个 order by。
例如TOP 99.999999 PERCENT,我知道有一些方法可以绕过此限制,但我想知道最佳实践是什么,而不是如何破解它。
所以,如果我想在我的数据库中创建供个人使用的视图,这意味着我想连接到数据库并只看到固定和排序的数据,如果我不能订购视图,我该怎么做?
目前在我的 SQL Server 数据库中,我对TOPhack有意见,我经常使用它们,但感觉不对。
我有一个带有多个连接的查询,它需要很长时间才能返回一个日期的数据。我已经创建了一个索引视图。在创建视图和索引时,我适当地设置了所有必需的选项。
我想利用索引视图的优势,如果我在其他地方有类似的查询或完全相同的查询,查询优化器会选择索引视图,以便提高性能。我尝试使用用于创建索引的完全相同的查询(带有额外的日期过滤器),但查询计划似乎没有改变。即使我在查询中显式使用视图,视图上的索引仍未使用。我只能让查询优化器使用带有 noexpand 提示的索引。请注意,我使用的是 SQL Server 企业版。
有什么建议?
我有一个 PostgreSQL (9.4) 数据库,它根据当前用户限制对记录的访问,并跟踪用户所做的更改。这是通过视图和触发器实现的,并且在大多数情况下效果很好,但是我在需要INSTEAD OF触发器的视图上遇到了问题。我试图减少问题,但我提前道歉,这仍然很长。
到数据库的所有连接都是通过单个帐户从 Web 前端建立的dbweb。连接后,角色将通过SET ROLEWeb 界面更改为对应的人,所有此类角色都属于组角色dbuser。(有关详细信息,请参阅此答案)。让我们假设用户是alice。
我的大部分表都放置在一个架构中,在这里我将调用该架构private并属于dbowner. 这些表不能直接dbuser被其他角色访问,但可以被其他角色访问dbview。例如:
SET SESSION AUTHORIZATION dbowner;
CREATE TABLE private.incident
(
incident_id serial PRIMARY KEY,
incident_name character varying NOT NULL,
incident_owner character varying NOT NULL
);
GRANT ALL ON TABLE private.incident TO dbview;
Run Code Online (Sandbox Code Playgroud)
特定行对当前用户的可用性alice由其他视图确定。一个简化的例子(可以减少,但需要以这种方式来支持更一般的情况)是:
-- Simplified case, but in principle could join multiple tables to determine allowed ids …Run Code Online (Sandbox Code Playgroud) 我是一名“偶然”的 DBA,相对缺乏经验并且对这个问题感到困惑。
运行 MS SQL Server 2012。问题在于这个 UPDATE 语句:
UPDATE dbo.tAccts SET
Ticket = 'ARP.ExGE'
, Method = 'smtp'
, AcctOwner = 'r00417819'
, DisplayName = '~AppLight HBSFax-Inactive'
, Destination = 'r00417819@mail.ad.ge.com'
, UpdatedBy = SYSTEM_USER
, UpdatedOn = CAST(GetDate() AS DATE)
FROM dbo.vReclaimable
WHERE OHR_EmpStatus <> 'A'
Run Code Online (Sandbox Code Playgroud)
这应该只更新tAccts 表中由 vReclaimable 视图返回的行。
vReclaimable 视图基于 tAccts 表并返回 tAccts 中行的子集。
当我运行它时,它失败并显示唯一键错误:
(0 row(s) affected)
Msg 2627, Level 14, State 1, Line 67
Violation of UNIQUE KEY constraint 'UQ__tAccounts_DNIS.Method.Destination.Phones'. Cannot …Run Code Online (Sandbox Code Playgroud) 我根据 database2 中的表在 database1 中创建了视图。我SELECT授予了一个只能访问 database1 的用户的权限。用户无法使用此视图,因为他在 database2 中没有帐户。我该如何解决这个问题?我不想在 database2 中创建帐户。
正如标题行所暗示的那样:在具有索引的 VIEW 上使用 ALTER VIEW 语句将在没有警告的情况下从 VIEW 中删除此(所有?)索引。我希望 ALTER VIEW 语句失败,通知我先删除索引。
SQL SERVER 中是否有更改此行为的设置?还是在 SQL 2012 (SP3) 之后的版本中发生了变化?
我必须使用索引视图来达到性能。正如我从这个比较表中看到的,标准版不支持索引视图。但是 BOL 说:
可以在任何版本的 SQL Server 中创建索引视图。在 SQL Server Enterprise 中,查询优化器会自动考虑索引视图。要在所有其他版本中使用索引视图,必须使用 NOEXPAND 表提示。
那么它会起作用吗(我说的是性能)
select * from dbo.OrderTotals with (noexpand, index=IXCU_OrderTotals)
Run Code Online (Sandbox Code Playgroud)
在 SQL Server 标准版上以及它的工作原理
select * from dbo.OrderTotals
Run Code Online (Sandbox Code Playgroud)
在企业版上?
这是查看代码:
CREATE VIEW dbo.OrderTotals
WITH SCHEMABINDING
AS
select
OrderId = r.OrderId
, TotalQty = SUM(r.Quantity)
, TotalGrossConsid = SUM(r.Price * r.Quantity)
, XCount = COUNT_BIG(*)
from dbo.Order r
group by r.OrderId
CREATE UNIQUE CLUSTERED INDEX IXCU_OrderTotals ON OrderTotals (OrderId)
Run Code Online (Sandbox Code Playgroud) view ×10
sql-server ×6
index ×2
postgresql ×2
backup ×1
constraint ×1
mysql ×1
mysqldump ×1
order-by ×1
performance ×1
permissions ×1
remote ×1
security ×1
trigger ×1
update ×1