我正在从MySQL迁移到PostgreSQL并且已经打破了用户权限.我习惯使用以下命令为用户分配数据库的所有表的所有权限:
# MySQL
grant all privileges on mydatabase.* to 'myuser'@'localhost' identified by 'mypassword';
Run Code Online (Sandbox Code Playgroud)
在我看来,PostgreSQL 9.x解决方案涉及为"模式"分配权限,但我需要努力弄清楚究竟要发出什么SQL证明是过分的.我知道再花几个小时的研究会得出答案,但我认为每个从MySQL迁移到PostgreSQL的人都可以从网上至少有一个提供简单完整配方的页面中受益.这是我需要为用户发出的唯一命令.我宁愿不必为每个新表发出命令.
我不知道在PostgreSQL中必须以不同的方式处理哪些场景,所以我将列出我过去通常必须处理的一些场景.假设我们只想修改已创建的单个数据库的权限.
(1a)并非所有表都已创建,或(1b)表已经创建.
(2a)尚未创建用户,或(2b)已创建用户.
(3a)尚未将权限分配给用户,或者(3b)先前已将权限分配给用户.
(4a)用户只需要插入,更新,选择和删除行,或者(4b)用户还需要能够创建和删除表.
我已经看到了为所有数据库授予所有权限的答案,但这不是我想要的.拜托,我正在寻找一个简单的食谱,虽然我也不介意解释.
我不想授予所有用户和所有数据库的权限,因为这似乎是传统的快捷方式,因为当任何一个用户受到攻击时,该方法会破坏所有数据库.我托管多个数据库客户端并为每个客户端分配不同的登录.
看起来我还需要USAGE
获得serial
列的增加值的权限,但我必须以某种顺序授予它.我的问题变得更复杂了.
在 Typescript 中,如何在编译时将泛型类型限制为多个类之一?例如,你如何实现这个伪代码?
class VariablyTyped<T has one of types A or B or C> {
method(hasOneType: T) {
if T has type A:
do something assuming type A
if T has type B:
do something assuming type B
if T has type C:
do something assuming type C
}
}
Run Code Online (Sandbox Code Playgroud)
此外,我希望能够将属性(或任何变量)分配给通用类型选项之一的特定后代类型,而不仅仅是给定类型之一。例如:
class VariablyTyped<T has one of types A or B or C> {
descendentClassOfT: T
method(hasOneType: T) {
descendentClassOfT = hasOneType
}
}
class D extends class C {
methodUniqueToD() …
Run Code Online (Sandbox Code Playgroud) 我正在Android/Kotlin/KTX 上完成这个 Udacity 课程。“关于我”应用程序引入了数据绑定,而 Android 团队似乎不建议使用 KTX 绑定。所以我想做前者而不是后者。
然而,事情并没有像预期的那样发展。这些是我面临的奇怪问题:
R.id.viewName
ID。打字R.id.
会给我各种选项,例如R.id.action_bar
,但我的活动中没有。在某些时候,这清除了。lateinit var binding: ActivityMainBinding
)。实际上,我认为它需要不止一次构建,可能是因为我在其他地方乱搞(见下文)而得到修复。doneButton
,我可以在代码中将它作为合成引用,doneButton
只需导入它即可。我认为这意味着对象总是在运行时构建的,即使我不打算使用它们。如何让这些 KTX 风格的绑定消失?这是我的构建gradle:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
ext.kotlin_version = '1.3.31'
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.4.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
// NOTE: Do not place …
Run Code Online (Sandbox Code Playgroud) android kotlin android-databinding android-ktx android-jetpack
如何防止 aRaisedButton
扩展以填充Expanded
包含它的 ?我想创建三列宽度与可用空间成正比的列,但我希望每列中的子项是其自然大小,而不消耗其父项的整个宽度Expanded
。
Widget _controls(BuildContext cx) {
return Row(
children: [
Expanded(
flex: 1,
child: player.isOnFirstItem
? Container()
: IconButton(
icon: Icon(Icons.arrow_back),
onPressed: () => control.gotoPreviousItem(),
),
),
Expanded(
flex: 4,
child: player.isComplete()
? Text(player.currentItem.status) // I'll be adding more here
: RaisedButton(
child: Text(player.currentItem.actionText),
onPressed: () => player.currentItem.action(),
),
),
Expanded(
flex: 1,
child: player.isOnLastItem
? Container()
: IconButton(
icon: Icon(Icons.arrow_forward),
onPressed: () => player.gotoNextItem(),
),
),
],
);
Run Code Online (Sandbox Code Playgroud)
该RaisedButton
还填充内的柔性空间时,我还窝它Container …
Dart提供了一个Error
类和一个Exception
用于抛出异常的类。为什么Error
构造函数不像构造函数那样接受消息参数Exception
?
来自错误类文档:
程序失败时抛出的错误对象。
Error 对象表示程序员应该避免的程序故障。
来自异常类文档:
异常旨在向用户传达有关故障的信息,以便可以通过编程方式解决该错误。它旨在被捕获,并且应该包含有用的数据字段。
较早的SO 答案引用了一篇帖子,证实了这种区别。
我喜欢这种区别。这告诉我,我的许多检查应该抛出Error
.
我很高兴使用Error
错误类型进行子类化,但我仍然需要报告引发错误的值。为什么 Dart 让我可以轻松地使用 来执行此操作,Exception
但不能使用Error
?
我意识到我可以通过声明应用程序范围的错误类来解决问题:
class AppError extends Error {
String message;
AppError([this.message]);
String toString() {
return message == null ? runtimeType : "$runtimeType: $message";
}
}
Run Code Online (Sandbox Code Playgroud)
Error
和之间的差异Exception
让我认为我误解了Error
或使用不当。在 Dart 中抛出非用户错误的正确方法是什么?
为通过单页面应用程序管理的资源提供可公开访问的URL有哪些约定?我认为这是一个建筑设计问题,但我预计会在AngularJS中开发SPA,以防万一.我是SPA的新手.
用户将通过SPA创建,查看和修改各种类型的资源(例如,基于服务器的对象).通过永久链接URL,公众也可以访问这些相同的资源.我很好用SPA在访问资源的永久链接URL时为访问者显示资源.
我只能想到这两种方法:
http://example.com/resourcetype/resourceID
实现RESTful API(改变HTTP方法).http://example.com/resourcetype/resourceID
并命中SPA http://example.com/api/resourcetype/resourceID
.(将永久链接置于其下似乎不合理/api
.通过"永久链接",我只是指资源的公共未登录URL.)
我希望通过SPA导航到资源的用户到达可共享的URL,因为想要共享该页面的用户首先想要共享其URL,而不是首先找到指向永久链接页面的链接.这表明采用第一种方法,但第二种方法是用于经由网址,如版本的API更好/api/v1
,/api/v2
等
避免URL中的哈希是理想的.我知道我可以在AngularJS中使用HTML5模式在支持该模式的浏览器中隐藏它们.这也需要服务器端支持,我已经看到了将深层链接重写为SPA访问URL链接的解决方案.
我想知道人们在做什么,以及人们是否发现自己在实践中限制了SPA的使用.谢谢你的帮助!
如何在 Dart 中将 ByteBuffer 的字节快速复制到另一个更大的 ByteBuffer(以非零偏移量)?
有一些缓慢的方法可以做到这一点。一种是将每个都转换为 Uint8List 并一次复制一个索引。另一种方法是将每个转换为 Uint8List,为第一个获取迭代器,然后调用setRange()
第二个。
我认为应该有一种更直接的方法来要求 Dart API 快速将字节序列从一个缓冲区复制到另一个缓冲区。API 可以本地优化此副本。如果不是,那么最快的方法是什么?
更新:我已经结束了对这个问题的研究,并发布了一篇冗长的博客文章来解释我的发现:JWT 的不言而喻的漏洞。我解释了使用 JWT 进行本地身份验证的巨大推动如何忽略了一个关键细节:必须保护签名密钥。我还解释说,除非您愿意不遗余力地保护密钥,否则最好通过 Oauth 委托身份验证或使用传统的会话 ID。
我已经看到很多关于 JSON Web 令牌安全性的讨论——重放、撤销、数据透明度、令牌指定的算法、令牌加密、XSS、CSRF——但我没有看到任何对依赖于签名密钥。
如果有人破坏了服务器并获得了 JWT 签名密钥,在我看来,此人此后可以使用该密钥伪造未过期的 JWT 并秘密获得访问权限。当然,服务器可以在每个请求上查找每个 JWT 以确认其有效性,但服务器完全使用 JWT,因此它们不必这样做。服务器可以确认 IP 地址,但如果 JWT 不可信,这也涉及查找,显然这样做会排除可靠的移动访问。
将此与基于会话 ID 的服务器违规进行对比。如果此服务器正在散列密码,则攻击者必须在会话 ID 过期之前分别为每个用户获取并使用会话 ID。如果服务器仅存储会话 ID 的哈希值,则攻击者必须写入服务器以确保访问。无论如何,攻击者似乎没有那么有利。
我发现了一种使用 JWT 的架构而没有这个缺点。反向代理位于外部不受信任的客户端和内部微服务的后端集合之间,由 Nordic API 在此处描述. 客户端从授权服务器获取不透明令牌,并使用该令牌与服务器应用程序通信以处理所有请求。对于每个请求,代理将不透明令牌转换为 JWT 并缓存它们的关联。外部世界从不提供 JWT,限制了因窃取密钥而造成的损害(因为代理会转到身份验证服务器以确认不透明的令牌)。但是,这种方法需要取消引用每个客户端令牌,就像会话 ID 需要针对每个请求取消引用一样,从而消除了 JWT 对客户端请求的好处。在这种情况下,JWT 只允许服务在彼此之间传递用户数据,而不必完全信任彼此——但我仍在尝试理解这种方法的价值。
我的担忧似乎仅适用于不受信任的客户端使用 JWT 作为身份验证令牌。然而,JWT 被许多备受瞩目的 API 使用,包括 Google API。我错过了什么?也许服务器漏洞很少是只读的?有没有办法降低风险?
使用 Visual Studio Code (v1.16.0),在为所需模块之一安装 Typescript 类型后,如何刷新“问题”窗格中的错误?(编辑:在后台加载或更新依赖模块时也存在类似的问题。)
重建是不行的。我目前正在更改并重新保存每个文件,以强制 VSC 重新生成错误并反映新安装的类型。我想我可以关闭该项目并在有很多文件时重新打开它。
我有点不好意思问这个问题,因为它看起来很基本。
我需要一个能够将构建委托给 gulp 任务的解决方案。gulp 任务使用编译器选项来tsconfig.json
确保 VSC 和构建报告相同的编译器错误。但是,我已经确认,即使通过 构建,“问题”窗格也不会更新tsc: build - tsconfig.json
。
我应该得到以下错误:
class.dart:11:11:错误:没有为类“Y”定义 getter“_privateID”。-“Y”来自“class.dart”。尝试将名称更正为现有 getter 的名称,或定义名为“_privateID”的 getter 或字段。
从下面的代码?
mixin.dart:
class Mixin {
static int _nextID = 0;
int publicID = _nextID++; // I only need one of these lines
int _privateID = _nextID++; // but this variable is inaccessible
}
Run Code Online (Sandbox Code Playgroud)
类.dart:
import 'mixin.dart';
class X with Mixin {
void run() {
print(publicID); // no error here
}
}
class Y with Mixin {
void run() {
print(_privateID); // Error: _privateID not defined
}
}
void main() {
Y().run(); …
Run Code Online (Sandbox Code Playgroud) dart ×3
typescript ×2
android ×1
android-ktx ×1
angularjs ×1
bytebuffer ×1
copy ×1
database ×1
exception ×1
flutter ×1
generics ×1
jwt ×1
kotlin ×1
mixins ×1
permalinks ×1
postgresql ×1
privileges ×1
rest ×1
restriction ×1
secret-key ×1
security ×1
sql ×1